MongoDB:在包含对象数组的文档中查询完成情况

时间:2017-07-19 11:45:52

标签: mongodb

我在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 }}]})

1 个答案:

答案 0 :(得分:0)

这......

db.folder.find({"docs.bar": {$exists: true}, "docs.bar": {$ne: null}})

...将仅返回docs数组中至少有一个子文档具有填充的bar属性的条目。注意:在此查询中,两个谓词是AND,我认为符合您的要求,它肯定会从您提供的集合中返回_id: 2的文档。