MongoDBが等しくない


102

テキストフィールドが ''(空白)ではないMongoDBでクエリを表示しようとしています

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

しかしエラーが出ます invalid use of $not

私はドキュメントを調べましたが、それらが使用する例は(正規表現を使用して$not別の演算子を否定する)複雑な場合のものです。

私がやろうとしている簡単なことはどうすればよいですか?

回答:


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ために「等しくない」を指します。
アブラハム

1
この回答には多数の投票がありますが、説明は非常に不明確です。$ notと$ neの両方がある例では何が起こっていますか?
GaTechThomas

そう要するに$not :{ $ne手段 $eq、これはあなたが言うしようとしていた何ですか?
Anu



10

Mongo docsから:

$notオペレータは、他の事業者に影響を与え、独立してフィールドや文書を確認することができません。したがって、$not論理和に演算子を使用し、演算子を使用して$neフィールドの内容を直接テストします。

フィールドを直接テストしているので、$neここで使用する適切な演算子です。

編集:

使用したい状況$notは次のとおりです。

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

これにより、次のすべてのドキュメントが選択されます。

  • 価格フィールドの値が1.99以下または価格
  • フィールドが存在しません

3

null配列にaがあり、それを避けたい場合:

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()} }); 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.