我正在尝试查找不包含至少一个具有特定字段值的文档的所有文档。例如这里是一个示例集合:
{ _id : 1,
docs : [
{ foo : 1,
bar : 2},
{ foo : 3,
bar : 3}
]
},
{ _id : 2,
docs : [
{ foo : 2,
bar : 2},
{ foo : 3,
bar : 3}
]
}
我想在 docs block 中找到不包含至少一个 foo = 1 记录的文档的每条记录。在上面的示例中,应该只返回第二个文档。
我尝试了以下方法,但它只告诉我是否有任何不匹配的内容(返回文档 1。
db.collection.find({"docs": { $not: {$elemMatch: {foo: 1 } } } })
更新:上面的查询确实有效。正如很多次发生的那样,我的数据是错误的,而不是我的代码。
我也看过 $nin operator但是这些示例仅显示了数组何时包含原始值列表,而不是附加文档。当我尝试使用以下内容执行此操作时,它会查找 EXACT 文档,而不仅仅是我想要的 foo 字段。
db.collection.find({"docs": { $nin: {'foo':1 } } })
有没有办法用基本操作符来完成这个?
最佳答案
使用 $nin
会工作,但你有语法错误。应该是:
db.collection.find({'docs.foo': {$nin: [1]}})
关于mongodb - 在 MongoDB 中查找具有不包含具有特定字段值的文档的数组的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16221599/