Mongo查找不包含给定值的文档(使用$ not)

时间:2013-12-27 15:47:17

标签: mongodb

我在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,但为什么?如何查询以查找标签中不包含给定值的记录?

2 个答案:

答案 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"}})