MongoDB ile Alanın Varolduğunu Kontrol Edin


131

Bu nedenle, bir alan kümesine sahip olan ve boş olmayan tüm kayıtları bulmaya çalışıyorum.

Kullanmayı deniyorum $exists, ancak MongoDB belgelerine göre bu sorgu null'a eşit alanlar döndürecektir.

$exists boş değeri depolayan alanı içeren belgelerle eşleşir.

Bu yüzden şimdi şöyle bir şey yapmam gerektiğini varsayıyorum:

db.collection.find({ "fieldToCheck" : { $exists : true, $not : null } })

Ancak bunu her denediğimde, hata alıyorum [invalid use of $not] Herkesin bunu nasıl sorgulayacağına dair bir fikri var mı?

Yanıtlar:


184

Kullanım $ne("eşit değil" için)

db.collection.find({ "fieldToCheck": { $exists: true, $ne: null } })

Bu ne döndürür? Boş bir koleksiyon mu? Tek bir öğe mi? Bir dizi mi?
Oliver Dixon

4
@iLoveUnicorns: findher zaman döndüren: kriterlere uygun bir kayıt koleksiyonu.
Sergio Tulentsev

2
@SergioTulentsev AFAIK bir imleç döndürüyor
fernandohur

@fernandohur: evet, ancak birden fazla belgeniz varsa, farkı görmeyeceksiniz bile. Ve eğer bu sorguyu harici sürücüden çalıştıracak olsaydınız, eminim çoğunun sizi imleç uygulama detayından koruduğundan eminim.
Sergio Tulentsev

24

Aşağıdaki gibi bir koleksiyonumuz olduğunu varsayalım:

{ 
  "_id":"1234"
  "open":"Yes"
  "things":{
             "paper":1234
             "bottle":"Available"
             "bottle_count":40
            } 
}

Şişe alanının mevcut olup olmadığını bilmek istiyoruz.

Ans:

db.products.find({"things.bottle":{"$exists":true}})

2
When <boolean> is true, $exists matches the documents that contain the field, including documents where the field value is null. Dokümanlardan.
AlbertEngelB

1
evet, ama bir DB'nin neden boş değeri içerdiğini anlamıyorum, bu saçma
Martijn Scheffer

3

bunun benim için işe yaradığını buldum

db.getCollection('collectionName').findOne({"fieldName" : {$ne: null}})
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.