Periksa bahwa Field Ada dengan MongoDB

131

Jadi saya berusaha menemukan semua catatan yang memiliki kumpulan bidang dan bukan nol.

Saya mencoba menggunakan $exists, namun menurut dokumentasi MongoDB, kueri ini akan mengembalikan bidang yang sama dengan nol.

$exists tidak cocok dengan dokumen yang berisi bidang yang menyimpan nilai nol.

Jadi saya sekarang berasumsi saya harus melakukan sesuatu seperti ini:

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

Namun, setiap kali saya mencoba ini, saya mendapatkan kesalahan. [invalid use of $not] Adakah yang tahu bagaimana cara menanyakan ini?

AlbertEngelB
sumber

Jawaban:

184

Gunakan $ne(untuk "tidak sama")

db.collection.find({ "fieldToCheck": { $exists: true, $ne: null } })
Sergio Tulentsev
sumber
Apa ini kembali? Koleksi nol? Satu item? Array?
Oliver Dixon
4
@ iLoveUnicorns: apa yang findselalu kembali: kumpulan catatan, cocok dengan kriteria.
Sergio Tulentsev
2
@SergioTulentsev AFAIK mengembalikan kursor
fernandohur
@fernandohur: yeah, tetapi jika Anda memiliki kurang dari satu halaman dokumen, Anda bahkan tidak akan melihat perbedaannya. Dan jika Anda menjalankan kueri ini dari driver eksternal, saya cukup yakin sebagian besar dari mereka melindungi Anda dari detail implementasi kursor.
Sergio Tulentsev
24

Misalkan kita memiliki koleksi seperti di bawah ini:

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

Kami ingin tahu apakah bidang botolnya ada atau tidak?

Jawab:

db.products.find({"things.bottle":{"$exists":true}})
Pavan Choudhary
sumber
2
When <boolean> is true, $exists matches the documents that contain the field, including documents where the field value is null. Dari dokumen.
AlbertEngelB
1
ya, tapi saya tidak mengerti mengapa DB berisi nilai nol, ceroboh
Martijn Scheffer
3

Saya menemukan bahwa ini bekerja untuk saya

db.getCollection('collectionName').findOne({"fieldName" : {$ne: null}})
Yakir Manor
sumber