最佳答案
我试图找到所有不包含至少一个具有特定字段值的文档。例如,下面是一个示例集合:
{ _id : 1,
docs : [
{ foo : 1,
bar : 2},
{ foo : 3,
bar : 3}
]
},
{ _id : 2,
docs : [
{ foo : 2,
bar : 2},
{ foo : 3,
bar : 3}
]
}
我希望找到 docs 块中没有包含至少一条 foo = 1记录的文档的每条记录。在上面的示例中,应该只返回第二个文档。
我尝试了以下方法,但它只告诉我是否有不匹配的(返回文档1)。
db.collection.find({"docs": { $not: {$elemMatch: {foo: 1 } } } })
更新: 上面的查询确实有效。很多时候,我的数据是错误的,而不是我的代码。
我也研究了 $nin 操作员,但是示例只在数组包含基元值列表而不是附加文档时显示。当我尝试使用下面这样的代码执行此操作时,它会查找精确的文档,而不仅仅是我想要的 foo 字段。
db.collection.find({"docs": { $nin: {'foo':1 } } })
是否有任何方法可以用基本的操作符来实现这一点?