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

Cara mendapatkan kembali dokumen Asli setelah agregasi

Termasuk dalam kategori trik agregasi bodoh adalah teknik kecil yang sering diabaikan.

Kueri melakukan semua pengelompokan di sekitar dokumen _id, menjadi pengidentifikasi unik untuk dokumen ini. Jadi poin utama yang harus dipikirkan adalah seluruh dokumen sebenarnya sudah merupakan pengidentifikasi unik. Jadi, daripada hanya menyimpan kunci _id, gunakan seluruh dokumen.

    {$project: { 
        _id: { _id: "$_id", name: "$name", forms: "$forms" }, forms: "$forms"}
    },

Di mana ini dilakukan, apa pun yang digulung oleh _id mempertahankan dokumen dalam bentuk aslinya. Di akhir semua tahap agregasi lainnya, terbitkan $project final final untuk mengembalikan bentuk dokumen asli yang sebenarnya:

    {$project: { _id: "$_id._id", name: "$_id.name", forms: "$_id.forms"}}

Kemudian Anda akan memiliki hasil yang disaring yang Anda inginkan. Teknik ini bisa sangat berguna bila digunakan dengan pemfilteran tingkat lanjut seperti dalam kasus kueri ini, karena teknik ini menghilangkan kebutuhan untuk mengeluarkan penemuan tambahan pada semua hasil.

Selain itu, dalam kasus di mana Anda tahu bahwa Anda hanya mencari serangkaian hasil yang akan cocok dengan serangkaian kondisi tertentu, gunakan $match operator sebagai pertama tahap pipa agregasi. Ini tidak hanya berguna dalam mengurangi ukuran working set, tetapi juga hanya tahap di mana Anda dapat menggunakan indeks dan di mana Anda dapat meningkatkan kinerja kueri secara signifikan.

Seluruh proses bersama:

db.forms.aggregate([
    {$match: { "forms.status": "closed" } },
    {$project: { 
        _id: { _id: "$_id", name: "$name", forms: "$forms" }, forms: "$forms"}
    },
    {$unwind: "$forms"},
    {$group: { _id: "$_id", status: {$addToSet: "$forms.status"}}},
    {$unwind: "$status"},
    {$sort: { _id: 1, status: -1} },
    {$group: { _id: "$_id", status: {$first: "$status"} }},
    {$match: { status: "closed"}},
    {$project: { _id: "$_id._id", name: "$_id.name", forms: "$_id.forms"}}
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Buat bidang peningkatan otomatis yang unik dengan luwak

  2. Bagaimana cara mendapatkan semua hasil jika bidang bersantai tidak ada di mongodb

  3. Cara membuat Pengguna &menambahkan Peran di MongoDB

  4. Menggunakan findOne di mongodb untuk mendapatkan elemen dengan max id

  5. C# - MongoDB - Perbarui elemen di dalam Dokumen Bersarang