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

MongoDB menambahkan bidang baru bernama dengan nilai variabel

Jadi idenya adalah:

  1. Kelompokkan dokumen menurut deliveryDay dan plate.name untuk mendapatkan jumlah plate.quantity .
  2. Kelompokkan hasil di atas lagi dengan name untuk menghasilkan larik [{ k: "", v: "" }] formatnya.
  3. Gabungkan { k: "plate", v: { name: "$_id" } } ke dalam larik di atas.
  4. Sekarang konversi array menjadi objek menggunakan $arrayToObject .

Solusi di taman bermain Mongo . Coba ini:

db.testCollection.aggregate([
    {
        $group: {
            _id: {
                dDate: "$deliveryDay",
                name: "$plate.name"
            },
            sumOfQty: { $sum: "$plate.quantity" }
        }
    },
    {
        $group: {
            _id: "$_id.name",
            array: {
                $push: {
                    k: "$_id.dDate",
                    v: "$sumOfQty"
                }
            }
        }
    },
    {
        $addFields: {
            array: {
                $concatArrays: ["$array", [{ k: "plate", v: { name: "$_id" } }]]
            }
        }
    },
    {
        $replaceRoot: {
            newRoot: { $arrayToObject: "$array" }
        }
    }
]);

Keluaran

/* 1 */
{
    "2021-01-16" : 2,
    "plate" : {
        "name" : "pizza"
    }
},

/* 2 */
{
    "2021-01-14" : 1,
    "2021-01-16" : 3,
    "plate" : {
        "name" : "pasta"
    }
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. php mongodb temukan entri ke-n dalam koleksi

  2. Luwak mendapatkan dokumen yang cocok dengan array

  3. driver nodejs mongodb memutuskan koneksi saat idle

  4. Tambal REST API ke Pembaruan Sebagian MongoDB di .NET

  5. Driver MongoDb C#, properti tipe yang mengimplementasikan IList tidak menyimpan