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

MongoDB elemMatch tidak berfungsi seperti yang diharapkan

Tidak ada yang salah dengan perilaku $elemMatch . Ia bekerja seperti yang diharapkan. Dokter juga mengatakan:

Sebagai aturan praktis setiap kali Anda memproyeksikan array menggunakan $elemMatch , hanya satu elemen akan diproyeksikan paling banyak . Jika tidak ada elemen dalam larik yang cocok, bidang tidak akan diproyeksikan sama sekali.

Jadi hasil yang Anda dapatkan benar, hanya item pertama dalam array yang sesuai dengan kondisi di $elemMatch akan projected .

{
    "_id" : ObjectId("5439a2992ea8cc0f70feef2d"),
    "Statuses" : [{
        ....
        "StatusID": NumberLong(525623822633172993),
        ....
    }]
}

Anda dapat mencoba mengubah urutan dokumen dalam larik status, dan mungkin mendapatkan dokumen pencocokan yang berbeda jika dokumen tersebut muncul di depan dokumen lain yang cocok dalam larik.

Lihat:$elemMatch

Datang ke kebutuhan Anda, jika Anda ingin semua elemen array yang cocok dalam hasil Anda, Anda perlu melakukan operasi agregasi.

  • Match dokumen-dokumen yang memiliki _id yang diperlukan dan dokumen-dokumen yang berisi sub dokumen status yang kita cari.
  • unwind larik status.
  • Lagi match dokumen individu yang dibuka.
  • Akhirnya group dokumen yang cocok dengan _id .

Kode:

db.collection.aggregate([
{$match:{ "_id": ObjectId("5439a2992ea8cc0f70feef2d"),
          "Statuses.StatusID":{$gte : NumberLong(525623822633172993)}}},
{$unwind:"$Statuses"},
{$match:{"Statuses.StatusID":{$gte : NumberLong(525623822633172993)}}},
{$group:{"_id":"$_id",statuses:{$push:"$Statuses"}}}
])

yang akan memberi Anda semua sub dokumen yang cocok dalam larik.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. SpringData Mongo @Kolom anotasi setara (@Properti?)

  2. Bisakah MongoDB menyimpan dan memanipulasi string UTF-8 dengan titik kode di luar bidang multibahasa dasar?

  3. Dokumen bersarang Java MongoDB tidak dapat diakses menggunakan titik di nama kunci

  4. Jalankan MongoTemplate.aggregate tanpa pengambilan baris

  5. Cara menanyakan elemen relatif menggunakan MongoDB