【问题标题】:How to select a record from an array in MongoDB collection如何从 MongoDB 集合中的数组中选择一条记录
【发布时间】:2020-01-15 15:33:07
【问题描述】:

我是 MongoDB 新手。

刚刚创建了一个名为 datasets 的集合,并在其中插入了一个大 json。

文档:

{
   "_id":ObjectId(   "5e1f2b248eebbe6d289d53c6"   ),
   "countries":{
      "country":[
         {
            "area":9596960,
            "cities":{
               "city":[
                  {
                     "citypopulation":7830000,
                     "cityname":"Shanghai"
                  },
                  {
                     "citypopulation":7000000,
                     "cityname":"Beijing"
                  },
                  {
                     "citypopulation":6218000,
                     "cityname":"HongKong"
                  },
                  {
                     "citypopulation":5770000,
                     "cityname":"Tianjin"
                  },
                  {
                     "citypopulation":4540000,
                     "cityname":"Shenyang"
                  },
                  {
                     "citypopulation":3750000,
                     "cityname":"Wuhan"
                  },
                  {
                     "citypopulation":3580000,
                     "cityname":"Guangzhou"
                  },
                  {
                     "citypopulation":2980000,
                     "cityname":"Chongqing"
                  },
                  {
                     "citypopulation":2830000,
                     "cityname":"Harbin"
                  },
                  {
                     "citypopulation":2810000,
                     "cityname":"Chengdu"
                  },
                  {
                     "citypopulation":2760000,
                     "cityname":"Xian"
                  },
                  {
                     "citypopulation":2500000,
                     "cityname":"Nanjing"
                  },
                  {
                     "citypopulation":2460000,
                     "cityname":"Zibo"
                  },
                  {
                     "citypopulation":2400000,
                     "cityname":"Dalian"
                  },
                  {
                     "citypopulation":2320000,
                     "cityname":"Jinan"
                  },
                  {
                     "citypopulation":2110000,
                     "cityname":"Changchun"
                  },
                  {
                     "citypopulation":2060000,
                     "cityname":"Qingdao"
                  },
                  {
                     "citypopulation":1960000,
                     "cityname":"Taiyuan"
                  },
                  {
                     "citypopulation":1710000,
                     "cityname":"Zhengzhou"
                  },
                  {
                     "citypopulation":1530000,
                     "cityname":"Guiyang"
                  },
                  {
                     "citypopulation":1520000,
                     "cityname":"Kunming"
                  },
                  {
                     "citypopulation":1510000,
                     "cityname":"Lanzhou"
                  },
                  {
                     "citypopulation":1500000,
                     "cityname":"Tangshan"
                  },
                  {
                     "citypopulation":1390000,
                     "cityname":"Anshan"
                  },
                  {
                     "citypopulation":1380000,
                     "cityname":"Qiqihar"
                  },
                  {
                     "citypopulation":1350000,
                     "cityname":"Nanchang"
                  },
                  {
                     "citypopulation":1350000,
                     "cityname":"Fushun"
                  },
                  {
                     "citypopulation":1340000,
                     "cityname":"Hangzhou"
                  },
                  {
                     "citypopulation":1330000,
                     "cityname":"Changsha"
                  },
                  {
                     "citypopulation":1320000,
                     "cityname":"Shijiazhuang"
                  },
                  {
                     "citypopulation":1290000,
                     "cityname":"Fuzhou"
                  },
                  {
                     "citypopulation":1270000,
                     "cityname":"Jilin"
                  },
                  {
                     "citypopulation":1200000,
                     "cityname":"Huainan"
                  },
                  {
                     "citypopulation":1200000,
                     "cityname":"Baotou"
                  },
                  {
                     "citypopulation":1190000,
                     "cityname":"Luoyang"
                  },
                  {
                     "citypopulation":1160000,
                     "cityname":"Urumqi"
                  },
                  {
                     "citypopulation":1110000,
                     "cityname":"Handan"
                  },
                  {
                     "citypopulation":1110000,
                     "cityname":"Datong"
                  },
                  {
                     "citypopulation":1090000,
                     "cityname":"Ningbo"
                  },
                  {
                     "citypopulation":1070000,
                     "cityname":"Nanning"
                  },
                  {
                     "citypopulation":1000000,
                     "cityname":"Hefei"
                  }
               ]
            },
            "name":"China",
            "population":1210004992
         },
         {
            "area":3287590,
            "cities":{
               "city":[
                  {
                     "citypopulation":9925891,
                     "cityname":"Mumbai"
                  },
                  {
                     "citypopulation":7206704,
                     "cityname":"NewDelhi"
                  },
                  {
                     "citypopulation":4399819,
                     "cityname":"Calcutta"
                  },
                  {
                     "citypopulation":3841396,
                     "cityname":"Madras"
                  },
                  {
                     "citypopulation":3302296,
                     "cityname":"Bangalore"
                  },
                  {
                     "citypopulation":3145939,
                     "cityname":"Hyderabad"
                  },
                  {
                     "citypopulation":2954526,
                     "cityname":"Ahmadabad"
                  },
                  {
                     "citypopulation":1879420,
                     "cityname":"Kanpur"
                  },
                  {
                     "citypopulation":1624752,
                     "cityname":"Nagpur"
                  },
                  {
                     "citypopulation":1619115,
                     "cityname":"Lucknow"
                  },
                  {
                     "citypopulation":1566651,
                     "cityname":"Pune"
                  },
                  {
                     "citypopulation":1505872,
                     "cityname":"Surat"
                  },
                  {
                     "citypopulation":1458183,
                     "cityname":"Jaipur"
                  },
                  {
                     "citypopulation":1091674,
                     "cityname":"Indore"
                  },
                  {
                     "citypopulation":1062771,
                     "cityname":"Bhopal"
                  },
                  {
                     "citypopulation":1061598,
                     "cityname":"Vadodara"
                  },
                  {
                     "citypopulation":1042740,
                     "cityname":"Ludhiana"
                  },
                  {
                     "citypopulation":1014557,
                     "cityname":"Kalyan"
                  }
               ]
            },
            "name":"India",
            "population":952107712
         }
      ]
   }
}

我想知道,为了学习目的,我可以做哪些类型的查找操作来选择这个json条目..?

我试图在 find 操作下运行,结果没有任何结果。

db.datasets.find({'name':'China'})

其次,我使用下面的命令在datasets 集合中添加了上面的json

mongoimport --db admin --collection datasets --file /home/lenny/TransformedJSON.json

它工作正常,但我想让这个命令失败。因为我不想在没有用户名和密码的情况下插入。怎么做?

任何人都可以建议..吗?

【问题讨论】:

  • @srinivasy, find 命令中的这个参数 "{ "countries.country.$": 1 }" 是什么......?
  • .find() 中的投影表示返回数组中与过滤器部分匹配的第一个元素 :: { 'countries.country.name': 'China' }
  • @srinivasy,谢谢..!
  • 同一个数组中是否有多个匹配项?
  • 如果是这样的话……?

标签: mongodb mongodb-query


【解决方案1】:

$elemMatch 运算符用于过滤数组中的值。

db.getCollection("datasets").find({
        'countries.country': {
            $elemMatch: {
                name: 'China'
            }
        }
    }, {
        'countries.country.$': 1
    })

【讨论】:

【解决方案2】:

问题与 .find()

db.datasets.find({ 'countries.country.name': 'China' },
    { "countries.country.$": 1 })

由于name 字段不在文档级别,您不能直接在该字段上查询,因为它是嵌套的,您需要使用. 表示法来达到该点。此外,由于它在一个数组中,您需要从数组 countries.country 中获取与过滤器匹配的指定元素,因此我们使用位置运算符,请在此处阅读更多内容:positional-projection

身份验证补救措施:

我怀疑您可能正在处理本地托管的mongoDB,然后您需要为该实例创建一个用户,尝试在此处查看他们的官方文档 :: db.createUser()-local-databasecreate-users

结果:

/* 1 */
{
    "_id" : ObjectId("5e1f2b248eebbe6d289d53c6"),
    "countries" : {
        "country" : [ 
            {
                "area" : 9596960,
                "cities" : {
                    "city" : [ 
                        {
                            "citypopulation" : 7830000,
                            "cityname" : "Shanghai"
                        }, 
                        {
                            "citypopulation" : 7000000,
                            "cityname" : "Beijing"
                        }, 
                        {
                            "citypopulation" : 6218000,
                            "cityname" : "HongKong"
                        }, 
                        {
                            "citypopulation" : 5770000,
                            "cityname" : "Tianjin"
                        }, 
                        {
                            "citypopulation" : 4540000,
                            "cityname" : "Shenyang"
                        }, 
                        {
                            "citypopulation" : 3750000,
                            "cityname" : "Wuhan"
                        }, 
                        {
                            "citypopulation" : 3580000,
                            "cityname" : "Guangzhou"
                        }, 
                        {
                            "citypopulation" : 2980000,
                            "cityname" : "Chongqing"
                        }, 
                        {
                            "citypopulation" : 2830000,
                            "cityname" : "Harbin"
                        }, 
                        {
                            "citypopulation" : 2810000,
                            "cityname" : "Chengdu"
                        }, 
                        {
                            "citypopulation" : 2760000,
                            "cityname" : "Xian"
                        }, 
                        {
                            "citypopulation" : 2500000,
                            "cityname" : "Nanjing"
                        }, 
                        {
                            "citypopulation" : 2460000,
                            "cityname" : "Zibo"
                        }, 
                        {
                            "citypopulation" : 2400000,
                            "cityname" : "Dalian"
                        }, 
                        {
                            "citypopulation" : 2320000,
                            "cityname" : "Jinan"
                        }, 
                        {
                            "citypopulation" : 2110000,
                            "cityname" : "Changchun"
                        }, 
                        {
                            "citypopulation" : 2060000,
                            "cityname" : "Qingdao"
                        }, 
                        {
                            "citypopulation" : 1960000,
                            "cityname" : "Taiyuan"
                        }, 
                        {
                            "citypopulation" : 1710000,
                            "cityname" : "Zhengzhou"
                        }, 
                        {
                            "citypopulation" : 1530000,
                            "cityname" : "Guiyang"
                        }, 
                        {
                            "citypopulation" : 1520000,
                            "cityname" : "Kunming"
                        }, 
                        {
                            "citypopulation" : 1510000,
                            "cityname" : "Lanzhou"
                        }, 
                        {
                            "citypopulation" : 1500000,
                            "cityname" : "Tangshan"
                        }, 
                        {
                            "citypopulation" : 1390000,
                            "cityname" : "Anshan"
                        }, 
                        {
                            "citypopulation" : 1380000,
                            "cityname" : "Qiqihar"
                        }, 
                        {
                            "citypopulation" : 1350000,
                            "cityname" : "Nanchang"
                        }, 
                        {
                            "citypopulation" : 1350000,
                            "cityname" : "Fushun"
                        }, 
                        {
                            "citypopulation" : 1340000,
                            "cityname" : "Hangzhou"
                        }, 
                        {
                            "citypopulation" : 1330000,
                            "cityname" : "Changsha"
                        }, 
                        {
                            "citypopulation" : 1320000,
                            "cityname" : "Shijiazhuang"
                        }, 
                        {
                            "citypopulation" : 1290000,
                            "cityname" : "Fuzhou"
                        }, 
                        {
                            "citypopulation" : 1270000,
                            "cityname" : "Jilin"
                        }, 
                        {
                            "citypopulation" : 1200000,
                            "cityname" : "Huainan"
                        }, 
                        {
                            "citypopulation" : 1200000,
                            "cityname" : "Baotou"
                        }, 
                        {
                            "citypopulation" : 1190000,
                            "cityname" : "Luoyang"
                        }, 
                        {
                            "citypopulation" : 1160000,
                            "cityname" : "Urumqi"
                        }, 
                        {
                            "citypopulation" : 1110000,
                            "cityname" : "Handan"
                        }, 
                        {
                            "citypopulation" : 1110000,
                            "cityname" : "Datong"
                        }, 
                        {
                            "citypopulation" : 1090000,
                            "cityname" : "Ningbo"
                        }, 
                        {
                            "citypopulation" : 1070000,
                            "cityname" : "Nanning"
                        }, 
                        {
                            "citypopulation" : 1000000,
                            "cityname" : "Hefei"
                        }
                    ]
                },
                "name" : "China",
                "population" : 1210004992
            }
        ]
    }
}

【讨论】:

    猜你喜欢
    • 2018-11-23
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多