如何在mongodb中查询子对象


79

我是mongodb的新手,正在尝试查询子对象。我有一个州的集合,每个州都有一个儿童城市。其中一个城市的Name属性为null,这在我的应用中导致错误。如何查询州集合以查找名称== null的子城市?

Answers:


113

如果准确null(相对于未设置):

db.states.find({"cities.name": null})

(但正如javierfp所指出的,它也匹配完全没有城市数组的文档,我假设它们确实匹配)。

如果没有设置该属性,则:

db.states.find({"cities.name": {"$exists": false}})

我已经用这两个插入创建的集合测试了上面的内容:

db.states.insert({"cities": [{name: "New York"}, {name: null}]})
db.states.insert({"cities": [{name: "Austin"}, {color: "blue"}]})

第一个查询找到第一个状态,第二个查询找到第二个状态。如果要通过一个查询找到它们两者,可以进行$or查询:

db.states.find({"$or": [
  {"cities.name": null}, 
  {"cities.name": {"$exists": false}}
]})

我如何获得所有子对象。使用投影,我只是得到一个房产
Yashraj basan

38

假设您的“状态”集合如下所示:

{"name" : "Spain", "cities" : [ { "name" : "Madrid" }, { "name" : null } ] }
{"name" : "France" }

查找空城市州的查询将是:

db.states.find({"cities.name" : {"$eq" : null, "$exists" : true}});

查询null的常见错误是:

db.states.find({"cities.name" : null});

因为此查询将返回所有缺少键的文档(在我们的示例中,它将返回西班牙和法国)。因此,除非确定键始终存在,否则必须像在第一个查询中一样检查键是否存在。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.