我在MongoDB中有两个项目:
{'title':'active item', 'tags':[ {'tag':'active'}, {'tag':'anothertag'} ]} {'title':'completed item', 'tags':[ {'tag':'completed'} ]}
它可以找到标记为已完成的项目:
db.items.find({'tags.tag':'completed'}) RESULT: []
现在,我想选择所有未标记为已完成的项目,所以我尝试了:
db.items.find({$not:{'tags.tag':'completed'}}) DESIRED RESULT: [] ACTUAL RESULT: []
但不知何故,这并没有返回任何结果.很明显我误解了不是在Mongo,但为什么?如何查询以查找其标记中不包含给定值的记录?
$not
运算符的目标需要是operator-expression,而不是field/value对象.
所以parvin的答案是最简单的方法,但是出于学习目的,您可以$not
使用$not
支持的表达式来完成此操作,例如:
db.items.find({tags: {$not: {$elemMatch: {tag: 'completed'}}}})
db.items.find({'tags.tag': {$not: /completed/}})