我正在尝试在MongoDB中显示一个文本字段不是''(空白)的查询
{ 'name' : { $not : '' }}
但是我收到错误invalid use of $not
我查看了文档,但他们使用的示例是针对复杂的情况(使用regexp和$not
否定另一个运算符)。
我怎么做我想做的简单事情?
答案 0 :(得分:122)
使用$ne
- $not
后面应该是标准运算符:
$ne
的示例,代表不相等:
use test
switched to db test
db.test.insert({author : 'me', post: ""})
db.test.insert({author : 'you', post: "how to query"})
db.test.find({'post': {$ne : ""}})
{ "_id" : ObjectId("4f68b1a7768972d396fe2268"), "author" : "you", "post" : "how to query" }
现在$not
,它接受谓词($ne
)并否定它($not
):
db.test.find({'post': {$not: {$ne : ""}}})
{ "_id" : ObjectId("4f68b19c768972d396fe2267"), "author" : "me", "post" : "" }
答案 1 :(得分:55)
如果您想做多个$ne
,请执行
db.users.find({name : {$nin : ["mary", "dick", "jane"]}})
答案 2 :(得分:30)
使用$ne
代替$not
http://docs.mongodb.org/manual/reference/operator/ne/#op._S_ne
db.collections.find({"name": {$ne: ""}});
答案 3 :(得分:8)
来自Mongo docs:
$not
运算符仅影响其他运算符,无法检查 字段和文档独立。因此,请使用$not
运算符 逻辑析取和$ne
运算符来测试内容 直接领域。
由于您正在直接测试该字段,$ne
是正确的操作符,可以在此处使用。
修改强>
您希望使用$not
的情况是:
db.inventory.find( { price: { $not: { $gt: 1.99 } } } )
这会选择所有文件:
答案 4 :(得分:2)
如果数组中有null
并且您想要避免它:
db.test.find({"contain" : {$ne :[] }}).pretty()
答案 5 :(得分:0)
现实生活中的例子;找到所有但不是当前的用户:
var players = Players.find({ my_x: player.my_x, my_y: player.my_y, userId: {$ne: Meteor.userId()} });