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

Mongo Query Pada Beberapa Bidang Sub-Dokumen

Ini sebenarnya yang $elemMatch operator adalah untuk meskipun sering disalahgunakan. Ini pada dasarnya melakukan kondisi kueri pada setiap elemen "di dalam" array. Semua argumen MongoDB adalah operasi "dan" kecuali secara eksplisit disebut sebaliknya:

db.collection.find({ "arr": { "$elemMatch": { "name": "b", "num": 2  } } })

Anda mungkin juga ingin "memproyeksikan" di sini jika Anda hanya mengharapkan bidang yang cocok dan bukan seluruh dokumen:

db.collection.find(
    { "arr": { "$elemMatch": { "name": "b", "num": 2  } } },
    { "arr.$": 1 }
)

Akhirnya untuk menjelaskan mengapa upaya kedua Anda tidak berhasil, kueri ini:

db.collection.find({
    "arr": [
        { "name": "b", "num": 2 }
    ]
})

Tidak cocok dengan apa pun karena tidak ada dokumen aktual di mana "arr" berisi elemen tunggal yang sama persis dengan kondisi Anda.

Contoh pertama Anda gagal..:

db.collection.find({
    $and: [
        { "arr.name": "b" },
        { "arr.num": 2 }
    ]
});

Karena ada beberapa elemen array yang memenuhi kondisi dan ini tidak hanya dianggap bahwa kedua kondisi berlaku untuk elemen yang sama. Itulah yang $elemMatch menambahkan, dan ketika Anda membutuhkan lebih dari satu kondisi untuk dicocokkan, maka di sinilah Anda menggunakannya.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Menerapkan Kontrol Akses Berbasis Peran dengan ClusterControl

  2. Bandingkan dokumen yang disematkan dengan bidang induk dengan mongoDB

  3. pengurangan nilai dalam koleksi hingga 0

  4. MongoDB/Meteor:Tambahkan ID unik ke setiap elemen array

  5. Cara mengambil/menemukan semua elemen array bersarang di MongoDB Java