2012-04-17 9 views
6

Belgenin dizisinde bir değer içermeyen bir belgeyi seçmeye çalışıyorum. İki sorun, ben ayrı ayrı sunacağız yaşıyorum

:

(1) Bir değer-içinde-dizisi sorgu ile çalışmak $ değil operatörü alamayan Örneğin: , ben varsa koleksiyonumda aşağıdaki belge: Ben kullanarak bu belgeyi seçebilir

{ _id: ObjectId("000000000000000000000000"), mylist: [ "red", "green", "blue" ] }

:

db.myCol.find({mylist:"red"})

Ancak, portakal yokluğunda için test ederek bu belgeyi seçmek istiyorum:

db.myCol.find({$not:{mylist:"orange"}})

Bu neden çalışmıyor?

dizi değerleri ObjectIds ise (2) İşe dizi sorgusunda değeri elde edemez:

myCol.find({mylist:ObjectId("111111111111111111111111")})

:

{ _id: Object("000000000000000000000000"), mylist: [ ObjectId("111111111111111111111111") ] }

bu belgeyi almak DEĞİLDİR aşağıdaki Birisi yanlış yapmakta olduğumu önerebilir mi?

cevap

6

gibi, belki kendi gibi basit durumlar için $ne istediğiniz işleri hiçbir $not yok:

db.myCol.find({ mylist: { $ne: 'orange' } }) 

Kişisel ikinci gerektiği (ve) belki de olanları yanlış sayıda kullanıyoruz, benim için iyi çalışır .

çok doğru
{ 
    "mylist" : { 
     $not : { 
      $in : ["red"] 
     } 
    } 
} 
+0

değil, orada bir [$ değil] (http://docs.mongodb.org/manual/reference: Alternatif olarak – nullabletype

+0

@ nullabletype: Yeni bir şey değil mi, yoksa gözden kaçırdım mı? Her durumda başınız için teşekkürler. –

3

, böyle değildin $ kullanabilirsiniz/operator/not /)
0
var queryarray = ['red'] 
db.myCol.find({ mylist: { $nin: queryarray } }) 
+0

Bu kod soruyu yanıtlarken, sorunun nasıl ve neden çözüldüğüne ilişkin ek bağlam sağlayarak yanıtın uzun vadeli değerini artıracaktır. – cpburnz