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.