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

Node.jsとMongooseを使用して、正の合計、負の合計の価格、合計を計算するにはどうすればよいですか?

    期待される結果が数値とsummaryの値であることを考慮すると コレクションは数値です(そうでない場合は数値にする必要があります)。ここに結果を計算する集計があります:

    db.getCollection('userpricing').aggregate([
        {$group: {
            _id:"$user_id", 
            user_id: {$first: "$user_id"}, 
            Totalpositiveprice:{$sum:{$cond:[{ '$gt': ['$price', 0]}, "$price", 0]}}, 
            Totalnegativeprice:{$sum:{$cond:[{ '$lt': ['$price', 0]}, "$price", 0]}},
            Balanceprice:{"$sum":"$price"}}
         },
        {
          $lookup:
            {
              from: "summary",
              localField: "user_id",
              foreignField: "user_id",
              as: "user_id2"
            }
       },
       {$project: {
        _id:0, 
        user_id:1, 
        Totalpositiveprice: {$sum: ["$Totalpositiveprice", {$sum: "$user_id2.Totalpositiveprice"}] },
        Totalnegativeprice: {$sum: ["$Totalnegativeprice", {$sum: "$user_id2.Totalnegativeprice"}] },
        Balanceprice: {$sum: ["$Balanceprice", {$sum: "$user_id2.Balanceprice"}] },
    }},
    
         {$out: "summary"}
    ]).pretty()
    

    結果:

    db.summary.find().pretty()
    
    {
        "_id" : ObjectId("584fde2906c7385883be0d15"),
        "user_id" : 2,
        "Totalpositiveprice" : 10000,
        "Totalnegativeprice" : 0,
        "Balanceprice" : 10000
    }
    {
        "_id" : ObjectId("584fde2906c7385883be0d16"),
        "user_id" : 1,
        "Totalpositiveprice" : 23000,
        "Totalnegativeprice" : -10000,
        "Balanceprice" : 13000
    }
    

    後で必要に応じて文字列に変換する必要があります。

    注: 結果は、新しい計算された(および更新された)値でサマリーコレクションをオーバーライドします。 最初に結果をテストすることをお勧めします。



    1. MongoDBで参照オブジェクトをクエリするにはどうすればよいですか?

    2. マングースの条件でルックアップ

    3. オブジェクトの配列から特定のネストされたオブジェクトを削除します

    4. マングースインデックスはすでにさまざまなオプションで存在しています