我有一个这样的集合:
[{
_id: 'XXX',
name: 'Foo',
device: {
android: 'SOME_STRING'
}
},{
_id: 'XXZ',
name: 'BAR',
device: {
ios: 'SOME_DIFFERENT_STRING'
}
}]
我想查询android或ios设备的项目。所以:
var query = {
device : {
android: {
$exists: true
}
}
}
collection.find(query)
但是这个查询总是给我一个空的结果,尽管数据库中有一些带有device.android的项目。
任何想法有什么不对?
答案 0 :(得分:1)
错误的查询形式。您需要dot notation:
db.collection.find({ "device.android": { "$exists": true } })
原因是嵌套对象表单对于查询引擎而言是显而易见的,并且在第一级它正在寻找"确切的"比赛。所以" $存在"被视为文字而非查询运算符。