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?

Jawaban:


184

Gunakan $ne(untuk "tidak sama")

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

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

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}})
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.