sql >> データベース >  >> NoSQL >> MongoDB

MongoDBは、変数値で名前が付けられた新しいフィールドを追加します

    つまり、アイデアは次のとおりです。

    1. ドキュメントをdeliveryDayでグループ化します およびplate.name plate.quantityの合計を取得するには 。
    2. 上記の結果をnameで再度グループ化します [{ k: "", v: "" }]の配列を生成します フォーマット。
    3. 連結{ k: "plate", v: { name: "$_id" } } 上記の配列に。
    4. 次に、arrayを変換します $arrayToObject を使用してオブジェクトに 。

    Mongo遊び場での解決策 。これを試してください:

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

    出力

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



    1. MongoShell-コンソール/デバッグログ

    2. MongoDB-複数の行を集約

    3. MeanJSを使用したマングースフレンズプラグインのインストール

    4. 類似の単語をグループ化するための良い戦略は何ですか?