MongoDB不等于

时间:2012-03-20 16:29:31

标签: mongodb

我正在尝试在MongoDB中显示一个文本字段不是''(空白)的查询

{ 'name' : { $not : '' }}

但是我收到错误invalid use of $not

我查看了文档,但他们使用的示例是针对复杂的情况(使用regexp和$not否定另一个运算符)。

我怎么做我想做的简单事情?

6 个答案:

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

这会选择所有文件:

  • 价格字段值小于或等于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()} });