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

hitung bidang subdokumen dan jumlah total di mongodb

MongoDB pipa agregasi tersedia untuk memecahkan masalah Anda. Anda mendapatkan detail dari array yang saya proses dengan $unwind dan kemudian menggunakan $group untuk "menjumlahkan" totalnya:

db.collection.aggregate([
    // Unwind the array to de-normalize as documents
    { "$unwind": "$details" },

    // Group on the key you want and provide other values
    { "$group": { 
        "_id": "$details.itemcode",
        "itemname": { "$first": "$details.itemname" },
        "totalprice": { "$sum": "$details.price" },
        "totalqty": { "$sum": "$details.qty" }
    }}
])

Idealnya Anda menginginkan $match tahap di sana untuk menyaring data yang tidak relevan terlebih dahulu. Ini pada dasarnya adalah kueri MongoDB dan mengambil semua argumen dan operator yang sama.

Kebanyakan di sini sederhana kok. $unwind adalah semacam "GABUNG" dalam SQL kecuali bahwa dalam struktur yang disematkan, "gabung" sudah dibuat, jadi Anda hanya "mendenormalisasi" seperti yang akan dilakukan gabungan antara hubungan tabel "satu ke banyak" tetapi hanya di dalam dokumen itu sendiri. Ini pada dasarnya "mengulangi" bagian dokumen "induk" ke larik untuk setiap anggota larik sebagai dokumen baru.

Kemudian $group bekerja dari sebuah kunci, seperti dalam "GROUP BY", di mana "kunci" adalah _id nilai. Semua yang ada di sana "berbeda" dan semua nilai lainnya dikumpulkan oleh "operator pengelompokan".

Di sinilah operasi seperti $first masuk. Seperti yang dijelaskan pada halaman manual, ini mengambil nilai "pertama" dari "batas pengelompokan" yang disebutkan dalam "kunci" sebelumnya. Anda menginginkan ini karena semua nilai bidang ini "kemungkinan" sama, jadi ini adalah pilihan logis untuk memilih kecocokan "pertama".

Akhirnya ada $sum pengelompokan operator yang melakukan apa yang diharapkan. Semua nilai yang diberikan di bawah "kunci" adalah "ditambahkan" atau "dijumlahkan" bersama-sama untuk memberikan total. Sama seperti SQL SUM() .

Perhatikan juga bahwa semua $ nama awalan ada bagaimana kerangka kerja agregasi menangani variabel untuk nama "bidang/properti" dalam dokumen saat ini sedang diproses. "Notasi titik" digunakan untuk mereferensikan "bidang/properti" yang disematkan di dalam nama properti induk.

Sangat berguna untuk mempelajari agregasi di MongoDB. Ini untuk pertanyaan umum apa yang melampaui pernyataan "PILIH" dasar untuk SQL. Tidak hanya untuk "pengelompokan" tetapi juga untuk manipulasi lainnya.

Baca dokumentasi semua operator agregasi dan juga lihat SQL ke Pemetaan Agregasi dalam dokumentasi sebagai panduan umum jika Anda memiliki beberapa keakraban dengan SQL untuk memulai. Ini membantu menjelaskan konsep dan menunjukkan beberapa hal yang dapat dilakukan.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pengurutan MongoDB sangat lambat bahkan pada bidang yang diindeks

  2. Terjemahkan Queryable<T> kembali ke IMongoQuery

  3. Memetakan 'array objek' ke array sederhana dari nilai kunci

  4. Koneksi MongoDb ditolak

  5. Bagaimana mengembalikan hanya dokumen bersarang dari array dari semua dokumen