MongoDB不等于


102

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

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

但是我得到了错误 invalid use of $not

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

我要如何做简单的事情?

Answers:


147

使用$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" : "" }

4
对于那些好奇心,$ne指的是“不平等”。
亚伯拉罕2012年

1
这个答案有很多票,但是解释还不清楚。在同时具有$ not和$ ne的示例中发生了什么?
GaTechThomas,2015年

因此,在短期$not :{ $ne的手段 $eq,这是你想说什么呢?
阿努

61

如果你想做多个$ne然后做

db.users.find({name : {$nin : ["mary", "dick", "jane"]}})


10

Mongo文档

$not操作员仅影响其他操作员,不能独立检查字段和文档。因此,使用$not运算符进行逻辑析取,然后使用$ne运算符直接测试字段的内容。

由于您正在直接测试该字段,因此$ne是在此处使用的正确操作员。

编辑:

您要使用的情况$not是:

db.inventory.find( { price: { $not: { $gt: 1.99 } } } )

那将选择所有文档,其中:

  • price字段值小于或等于1.99或价格
  • 栏位不存在

3

如果null数组中有一个,而您想避免它:

db.test.find({"contain" : {$ne :[] }}).pretty()

1

现实生活中的例子;查找所有但不是当前用户:

var players = Players.find({ my_x: player.my_x,  my_y: player.my_y, userId: {$ne: Meteor.userId()} }); 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.