我是mongodb的新手,正在尝试查询子对象。我有一个州的集合,每个州都有一个儿童城市。其中一个城市的Name属性为null,这在我的应用中导致错误。如何查询州集合以查找名称== null的子城市?
Answers:
如果准确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}}
]})
假设您的“状态”集合如下所示:
{"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});
因为此查询将返回所有缺少键的文档(在我们的示例中,它将返回西班牙和法国)。因此,除非确定键始终存在,否则必须像在第一个查询中一样检查键是否存在。