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