在mongodb $ sum函数的Sum期间添加一些额外的计算

时间:2017-12-05 11:22:01

标签: mongodb

我的Mongo-Db数据集是:

populate()

所以我知道我想在Sum期间做一些修改。 我的Sum Code是这样的:

{
    "_id" : ObjectId("5a267533754884223467604a"),
    "user_id" : "5a20ee1acdacc7086ce7742c",
    "tv_count" : 1,
    "ac_count" : 0,
    "fridge_count" : 0,
    "blower_count" : 0,
    "chair_count" : 0,
    "sofa_count" : 0,
    "D2H_count" : 2,
    "lastmodified" : ISODate("2017-12-05T10:30:30.559Z"),
    "__v" : 0
}

所以它会返回结果

Accessories.aggregate([
                {$match: { "lastmodified":{$gt: newTime}}},
                { 
                    $project: {
                        total: { 
                            $add: [ "$tv_count", "$ac_count", "$fridge_count", "$blower_count", "$chair_count", "$sofa_count", "$D2H_count"]
                        }
                    }
                }
            ]);

现在我想做一些额外的计算。例子是

[ { _id: 5a267533754884223467604a, total: 3 } ]

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我会在$addFields$match阶段之间的汇总管道中添加@project阶段。 在$addFields阶段,您可以定义新的“辅助字段” - 例如。

{ $addFields: {
    "tv_temp": { $multiply: [ "$tv_count", 2 ] },
    "D2H_temp": { $multiply: [ "$D2H_count", 4 ] },
  }
}

使用这些字段,您现在可以计算总数:

{ $project: {
  total: { 
    $add: [ "$tv_temp", "$ac_count", "$fridge_count", "$blower_count", "$chair_count", "$sofa_count", "$D2H_temp"]
  }
}}

答案 1 :(得分:0)

您可以在现有投影中简单地包含其他嵌套计算,如下所示:

$project: {
    total: { 
        $add: [ { $multiply: [ "$tv_count", 2 ] }, "$ac_count", "$fridge_count", "$blower_count", "$chair_count", "$sofa_count", { $multiply: [ "$D2H_count", 4 ] }]
    }
}

你应该使用$addFields或任何其他附加阶段来实现这类事情,因为添加阶段会减慢聚合管道,特别是添加字段会使阶段之间的中间结果文档因此再次减慢了查询速度。