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

Bagaimana mengembalikan hanya dokumen bersarang dari array dari semua dokumen

Anda dapat melakukannya menggunakan .aggregate() dan sebagian besar $unwind operator pipa:

Di MongoDB 3.4 modern dan di atasnya Anda dapat menggunakan bersama-sama dengan $replaceRoot

Model.aggregate([
  { "$unwind": "$books" },
  { "$replaceRoot": { "newRoot": "$books" } }
],function(err,results) {

})

Di versi sebelumnya Anda menentukan semua bidang dengan $project :

Model.aggregate([
  { "$unwind": "$books" },
  { "$project": {
    "_id": "$books._id",
    "pages": "$books.pages",
    "title": "$books.title"
  }}
],function(err,results) {

})

Jadi $unwind adalah apa yang Anda gunakan untuk mendekonstruksi atau "mendenormalisasi" entri array untuk diproses. Secara efektif ini membuat salinan seluruh dokumen untuk setiap anggota larik.

Tugas selanjutnya adalah mengembalikan "hanya" bidang yang ada dalam larik.

Padahal itu bukan hal yang sangat bijaksana untuk dilakukan. Jika maksud Anda hanya mengembalikan konten yang disematkan dalam larik dokumen, Anda sebaiknya memasukkan konten tersebut ke dalam koleksi terpisah.

Ini jauh lebih baik untuk kinerja, memisahkan semua dokumen dari koleksi dengan kerangka kerja agregasi, hanya untuk membuat daftar dokumen-dokumen itu dari array saja.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana mengelola database dan koleksi di MongoDB

  2. Hapus banyak dokumen dari mongo dalam satu kueri

  3. pencarian teks mongodb menggunakan berbagai bahasa

  4. Membuat spring-data-mongodb multi-tenant

  5. MongoDB Bersarang ATAU/DAN Dimana?