sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB přidá nová pole pojmenovaná hodnotou proměnné

Takže myšlenka je:

  1. Seskupit dokumenty podle deliveryDay a plate.name získáte součet plate.quantity .
  2. Výsledek seskupit znovu podle name vygenerovat pole [{ k: "", v: "" }] formátu.
  3. Zřetězit { k: "plate", v: { name: "$_id" } } do výše uvedeného pole.
  4. Nyní převeďte array do objektu pomocí $arrayToObject .

Řešení na hřišti Mongo . Zkuste toto:

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" }
        }
    }
]);

Výstup

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

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



  1. Analýza dlouhého řetězce dotazu přímo do MongoDB (stejně jako v SQL)

  2. Jak obejít nedostatek transakcí v MongoDB?

  3. MongoDB:Spojte data z více kolekcí do jedné..jak?

  4. dotaz mongoDB pro načítání z kolekce vnořených polí