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