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

Dalam mongodb $match, cara menguji bidang MATCHING , daripada bidang EQUALING

Apa yang Anda lihat dalam hasil itu benar. Pendekatan Anda agak salah. Jika Anda menginginkan hasil yang Anda harapkan, Anda harus menggunakan pendekatan ini:

collection.aggregate([
  {$match:{greetings:{$elemMatch:query}}},
  {$unwind:"$greetings"},
  {$match:{"greetings.hello":"world"}},
]).toArray()

Dengan ini, Anda akan mendapatkan output berikut:

[
  {greetings:{hello:"world"}},
  {greetings:{hello:"world"}},
  {greetings:{"hello":"world","extra":"data"}
]

Kapan pun Anda menggunakan aggregation di MongoDB dan ingin membuat saluran agregasi yang menghasilkan dokumen yang Anda harapkan, Anda harus selalu memulai kueri dengan tahap pertama. Dan akhirnya tambahkan tahapan untuk memantau output dari tahapan berikutnya.

Output dari $unwind . Anda panggungnya adalah:

[{
  greetings:{hello:"world"}
},
{
  greetings:{hello:"world", extra:"data"}
},
{
  greetings:{hello:"world"}
},
{
  greetings:{aloha:"mars"}
}]

Sekarang jika kami menyertakan tahap ketiga yang Anda gunakan, maka itu akan cocok untuk greetings kunci yang memiliki nilai {hello:"world"} dan dengan nilai yang tepat itu, ia hanya akan menemukan dua dokumen di dalam pipa. Jadi, Anda hanya akan mendapatkan:

{ "greetings" : { "hello" : "world" } }
{ "greetings" : { "hello" : "world" } }



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara mengembalikan dokumen tersemat Push() terakhir

  2. Gunakan agregasi di mongodb untuk melakukan pembaruan setelah kueri cocok

  3. Kueri dokumen dan semua subdokumennya yang cocok dengan kondisi di mongodb (menggunakan pegas)

  4. Cara paging yang efisien dengan MongoDB dan ASP.NET MVC

  5. Spring Data Mongo - Perform Distinct, tetapi tidak ingin menarik dokumen yang disematkan dalam hasil