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

MongoDB:apa perbedaan antara $elemMatch dan $dan untuk menemukan objek di dalam array?

Saya akan menjelaskan ini dengan sebuah contoh. Pertimbangkan koleksi arrays . Ini memiliki bidang yang disebut arr yang merupakan serangkaian dokumen yang disematkan (dengan bidang a dan b ).

Beberapa dokumen dalam arrays koleksi:

{ "_id" : 1, "arr" : [ { "a" : "a1", "b" : "b1" }, { "a" : "a2", "b" : "b2" } ] }
{ "_id" : 2, "arr" : [ { "a" : "a1", "b" : "b11" }, { "a" : "a2", "b" : "b22" } ] }
{ "_id" : 3, "arr" : [ { "a" : "a2", "b" : "b1" }, { "a" : "a", "b" : "b1" } ] }
{ "_id" : 4, "arr" : [ { "a" : "a1", "b" : "b91" }, { "a" : "a29", "b" : "b1" } ] }

Saya ingin menemukan semua dokumen dengan bidang dokumen tertanam array a="a1" DAN b="b1" . Perhatikan ini harus berada dalam elemen yang sama dengan dokumen tertanam dari array. Saya menggunakan $elemMatch untuk ini dan dapatkan hasil yang diinginkan.

> db.arrays.find( { arr: { $elemMatch: { a: "a1", b: "b1" } } } )
==>
{ "_id" : 1, "arr" : [ { "a" : "a1", "b" : "b1" }, { "a" : "a2", "b" : "b2" } ] }

Sekarang, jika saya menggunakan $and operator seperti pada kueri berikut, hasilnya tidak benar. Seperti yang Anda lihat, dokumen tambahan dipilih. Kueri bekerja dengan bidang dokumen tersemat array a="a1" ATAU b="b1" .

> db.arrays.find({$and: [ { "arr.a": "a1" }, { "arr.b": "b1" } ] } )
==>
{ "_id" : 1, "arr" : [ { "a" : "a1", "b" : "b1" }, { "a" : "a2", "b" : "b2" } ] }
{ "_id" : 4, "arr" : [ { "a" : "a1", "b" : "b91" }, { "a" : "a29", "b" : "b1" } ] }

Jadi, menggunakan $and operator TIDAK dimaksudkan untuk tujuan ini (yaitu, menanyakan beberapa bidang dari larik sub-dokumen).

Juga, untuk melakukan kueri pada bidang dokumen tersemat larik (hanya satu bidang ) $elemMatch tidak diperlukan, misalnya:

> db.arrays.find( { "arr.a": "a2" } )
==>
{ "_id" : 1, "arr" : [ { "a" : "a1", "b" : "b1" }, { "a" : "a2", "b" : "b2" } ] }
{ "_id" : 2, "arr" : [ { "a" : "a1", "b" : "b11" }, { "a" : "a2", "b" : "b22" } ] }
{ "_id" : 3, "arr" : [ { "a" : "a2", "b" : "b1" }, { "a" : "a", "b" : "b1" } ] }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dalam mongodb $match, cara menguji bidang MATCHING , daripada bidang EQUALING

  2. MongoDB $binarySize

  3. Bisakah saya membaca file csv di dalam file Javascript Mongo Shell?

  4. Cara Mengamankan Database Open Source Anda dengan ClusterControl

  5. Di Mongodb , bagaimana cara memeriksa apakah semua dokumen unik untuk suatu nilai?