【问题标题】:Create A function Which can do specific Sum on entire table [duplicate]创建一个可以对整个表进行特定求和的函数[重复]
【发布时间】:2018-02-19 07:08:43
【问题描述】:

我有一个这样的 Mongo DB 数据集:

{
    "_id" : ObjectId("5a8a75cdec129c86c6a2aaca"),
    "asset" : "121",
    "A" : 6,
    "C" : 12,
    "B" : 4,
    "D" : 8,
    "finalAB" : "",
    "finalCD" : "",
},
{
    "_id" : ObjectId("5a8a75cdec129c86c6a2aaca"),
    "asset" : "122",
    "A" : 8,
    "C" : 14,
    "B" : 6,
    "D" : 10,
    "finalAB" : "",
    "finalCD" : "",
}......upto 4k Entry Like this

现在我想创建 MongoDB 函数,它可以进行“finalAB”和“finalCD”的整表计算

注意:finalAB = A + B 和 finalCD = C + D。

感谢任何帮助

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    您不能在此处使用update,因为您在更新中引用了其他字段,但是您可以尝试使用聚合框架:

    db.col.aggregate([
        {
            $addFields: {
                finalAB: { $add: [ "$A", "$B" ] },
                finalCD: { $add: [ "$C", "$D" ] },
            }
        },
        {
            $out: "col"
        }
    ])
    

    $addFields 只是将您的 finalABfinalCD 替换为新值。 $out 是一种将聚合输出重定向到新集合的方法。这就是您可以替换(更新)现有集合的方式。

    【讨论】:

    • 谢谢,伙计。您建议的方法非常快。
    【解决方案2】:

    使用聚合查询:

           app.get("/getTotal",function(req,res){   
    
                 YourModel.aggregate([
                   {   
                        $addFields: {
                           finalAB: { $add: [ "$A", "$B" ] },
                           finalCD: { $add: [ "$C", "$D" ] },
                        }
                  },
                  { 
                     $group:{ _id:null,
                              finalAB:{ $sum: "$finalAB"},
                              finalCD:{ $sum: "$finalCD"}
                            }
                  }
                 ],function(err,result){
                         res.json(result);   
                  });
    
             });
    

    使用完整链接:https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/

    【讨论】:

    • 非常感谢您提供替代解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2020-11-03
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多