我正在尝试查找不包含至少一个具有特定字段值的文档的所有文档。例如,这里是一个示例集合:
{ _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 运算符,但示例仅显示数组何时包含原始值列表,而不是附加文档。当我尝试使用以下内容执行此操作时,它会查找 EXACT 文档,而不仅仅是我想要的 foo 字段。
db.collection.find({"docs": { $nin: {'foo':1 } } })
反正有没有用基本的操作符来完成这个?