MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Temukan dokumen dengan array yang berisi dokumen dengan bidang tertentu

Menggunakan $where operator.

db.collection.find(function() { 
    return this.docs.length === this.docs.filter(function(doc) {
        return typeof(doc.foo) !== "undefined" && doc.foo !== null ;}).length 
})

Cara lain untuk melakukannya adalah dengan menjalankan dua kueri:Satu untuk mengambil _id dari semua dokumen yang tidak sesuai dengan kriteria Anda menggunakan distinct() metode:

var unwantedIds = db.collection.distinct( "_id", { "docs": { "$elemMatch": { "foo": { "$exists": false } } } } );

Kemudian gunakan $nin operator untuk mengembalikan semua dokumen yang sesuai dengan kriteria Anda.

db.collection.find({ "_id": { "$nin": unwantedIds } } )

Anda juga dapat menggunakan .aggregate() tetapi ini hanya berfungsi jika Anda menggunakan versi 3.2 atau yang lebih baru karena Anda perlu menggunakan $filter

Tahap pertama dalam pipeline adalah $match tahap di mana Anda menyaring dokumen-dokumen di mana bidang "foo" tidak ada. Ini mengurangi jumlah total dokumen yang akan diproses ke bawah pipa. Tahap selanjutnya dan terakhir adalah $redact panggung. Pada tahap ini Anda perlu menggunakan $size operator untuk mengembalikan ukuran bidang "dokumen" dan ukuran larik sub-dokumen di mana "foo" ada dan mengembalikan semua dokumen yang kedua nilainya sama.

db.collection.aggregate([
    { "$match": { "docs.foo": { "$exists": true } } }, 
    { "$redact": { 
        "$cond": [ 
            { "$eq": [ 
                { "$size": "$docs" }, 
                { "$size":  { 
                    "$filter": { 
                        "input": "$docs", 
                        "as": "doc", 
                        "cond": { 
                            "$ne": [ 
                                { "$ifNull": [ "$$doc.foo", null ] },
                                null 
                            ] 
                        } 
                    }
                }}
            ]}, 
            "$$KEEP", 
            "$$PRUNE"
        ]
    }}
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Temukan di koleksi/objek - SailsJS dan Waterline ORM

  2. Tidak dapat membuat namespace dalam transaksi multi-dokumen (MongoDB 4.0, Spring Data 2.1.0, Spring Boot)

  3. Hasil aneh dari mongoid menggunakan mongodb pemerasan Debian

  4. Konversikan objek pengembalian mongodb ke kamus

  5. Menangani pemutusan/koneksi kembali MongoDB dari Node