MongoDB eşit değildir


102

MongoDB'de metin alanı olmayan bir sorgu görüntülemeye çalışıyorum '' (boş)

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

Ancak hatayı alıyorum invalid use of $not

Belgelere baktım, ancak kullandıkları örnekler karmaşık durumlar içindir (regexp ve $notbaşka bir operatörü reddederek).

Yapmaya çalıştığım basit şeyi nasıl yaparım?

Yanıtlar:


147

Kullanım $ne- $notstandart operatör tarafından takip edilmelidir:

$neEşit olmayan anlamına gelen bir örnek :

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" }

Ve şimdi $not, yüklemi ( $ne) alan ve onu olumsuzlayan ( $not):

db.test.find({'post': {$not: {$ne : ""}}})
{ "_id" : ObjectId("4f68b19c768972d396fe2267"), "author" : "me", "post" : "" }

4
Meraklı olanlar $neiçin "eşit değil" anlamına gelir.
abraham

1
Bu cevabın çok sayıda oyu var, ancak açıklaması çok net değil. Hem $ not hem de $ ne içeren örnekte neler oluyor?
GaTechThomas

$not :{ $neYani kısaca $eqsöylemek istediğin bu muydu?
Anu

61

Eğer birden yapmak istiyorsanız $neo zaman yapmak

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


10

Gönderen Mongo docs :

$notOperatör sadece diğer operatörlere etkiler ve bağımsız alanlar ve belgeleri kontrol edemez. Bu nedenle, $notmantıksal ayrılıklar için $neoperatörü ve alanların içeriğini doğrudan test etmek için operatörü kullanın.

Alanı doğrudan test ettiğiniz $neiçin, burada kullanılacak doğru operatördür.

Düzenle:

Kullanmak isteyeceğiniz bir durum $not:

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

Bu, aşağıdaki tüm belgeleri seçecektir:

  • Fiyat alanı değeri 1,99 veya fiyattan küçük veya ona eşit
  • Alan mevcut değil

3

Bir nulldizide bir varsa ve bundan kaçınmak istiyorsanız:

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

2

Gerçek hayat örneği; mevcut kullanıcıyı değil, tümünü bul:

var players = Players.find({ my_x: player.my_x,  my_y: player.my_y, userId: {$ne: Meteor.userId()} }); 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.