我在folders
集合中有以下文档:
folders: [
{ _id : 1,
docs : [
{ foo : 1,
bar : undefined},
{ foo : 3,
bar : 3}
]
},
{ _id : 2,
docs : [
{ foo : 2,
bar : 2},
{ foo : 3,
bar : 3}
]
},
{ _id : 3,
docs : [
{ foo : 2},
{ foo : 3,
bar : 3}
]
},
{ _id : 4,
docs : [
{ foo : 1 }
]
},
{ _id : 5,
docs : [
{ foo : 1,
bar : null }
]
}
]
我需要能够查询没有undefined
值,null
值或docs.bar
的不存在值的文档。在上面的情况中,查询应仅返回带有_id: 2
的文档。我目前有一个解决方案,但我想知道是否有更好的方法来查询文档。
我目前的解决方案:
db.folders.find({$nor: [{"docs.bar": { $exists: false }}]})
答案 0 :(得分:0)
这......
db.folder.find({"docs.bar": {$exists: true}, "docs.bar": {$ne: null}})
...将仅返回docs
数组中至少有一个子文档具有填充的bar
属性的条目。注意:在此查询中,两个谓词是AND,我认为符合您的要求,它肯定会从您提供的集合中返回_id: 2
的文档。