javascript - 如何合并和汇总来自 MongoDB 的结果
问题描述
我有不同日期的数据切片,例如:
[{
"_id" : ObjectId("5de4103552f7535d31c2e3e1"),
"attributedUnitsOrdered14d" : 0,
"clicks" : 1,
"targetId" : NumberLong(209434056899554),
"campaignId" : NumberLong(106574821410524),
"query" : "miami hurricanes t shirt",
"targetingType" : "TARGETING_EXPRESSION_PREDEFINED",
"campaignName" : "Miami Hurricanes - Sponsored Products - Auto",
"targetingExpression" : "close-match",
"adGroupId" : NumberLong(141291184479487),
"targetingText" : "close-match",
"date" : ISODate("2019-10-07T00:00:00.000Z"),
"__v" : 0
},
{
"_id" : ObjectId("5de4104b52f7535d31c2e3e7"),
"attributedUnitsOrdered14d" : 1,
"clicks" : 1,
"targetId" : NumberLong(209434056899554),
"campaignId" : NumberLong(106574821410524),
"query" : "miami hurricanes t shirt",
"targetingType" : "TARGETING_EXPRESSION_PREDEFINED",
"campaignName" : "Miami Hurricanes - Sponsored Products - Auto",
"targetingExpression" : "close-match",
"adGroupId" : NumberLong(141291184479487),
"targetingText" : "close-match",
"date" : ISODate("2019-10-08T00:00:00.000Z"),
"__v" : 0
},
{
"_id" : ObjectId("5de4105952f7535d31c2e3eb"),
"attributedUnitsOrdered14d" : 1,
"clicks" : 1,
"targetId" : NumberLong(209434056899554),
"campaignId" : NumberLong(106574821410524),
"query" : "miami hurricanes t shirt",
"targetingType" : "TARGETING_EXPRESSION_PREDEFINED",
"campaignName" : "Miami Hurricanes - Sponsored Products - Auto",
"targetingExpression" : "close-match",
"adGroupId" : NumberLong(141291184479487),
"targetingText" : "close-match",
"date" : ISODate("2019-10-09T00:00:00.000Z"),
"__v" : 0
}]
这些是针对一个广告系列的相同报告,但针对不同的日期。我想获得字段的总和clicks
& attributedUnitsOrdered14d
& 将其作为单个对象返回,如下所示:
{
"_id" : ...,
"attributedUnitsOrdered14d" : 2, // Sum of all the 3 objects
"clicks" : 3, // Sum of all the 3 objects
"targetId" : NumberLong(209434056899554),
"campaignId" : NumberLong(106574821410524),
"query" : "miami hurricanes t shirt",
"targetingType" : "TARGETING_EXPRESSION_PREDEFINED",
"campaignName" : "Miami Hurricanes - Sponsored Products - Auto",
"targetingExpression" : "close-match",
"adGroupId" : NumberLong(141291184479487),
"targetingText" : "close-match",
"date" : ISODate("2019-10-07T00:00:00.000Z"),
}
我可以使用中间件(用于查询的预挂钩find
)或类似的东西吗?
解决方案
似乎一个简单的$group就足够了:
db.collection.aggregate([
{
$group: {
_id: null, //decide on different grouping id if needed.
attributedUnitsOrdered14d: {$sum: "$attributedUnitsOrdered14d"},
clicks: {$sum: "$clicks"},
date: {$last: "$date"}, //assuming data is sorted, if not add $sort before $group
targetId: {$first: "$targetId"},
campaignId: {$first: "$campaignId"},
query: {$first: "$query"},
targetingType: {$first: "$targetingType"},
campaignName: {$first: "$campaignName"},
targetingExpression: {$first: "$targetingExpression"},
adGroupId: {$first: "$adGroupId"},
targetingText: {$first: "$targetingText"},
}
}
])
推荐阅读
- frameworks - forkdelta 的前端使用什么框架?
- c++ - 如何在单击按钮的确切时刻获取小部件的值 FLTK
- node.js - 有限的帖子请求
- list - 获取列表中的项目数
- excel - 调试代码以将选项卡从一个工作簿移动到另一个作为循环的一部分从主管打开的工作簿
- java - 使用 ResultSet .getArray() 时出现错误“java.sql.SQLException:结果集结束后”
- clang-format - clang-format 展开空初始化程序
- javascript - 从 Node Js Server + Express 下载文件
- sql-server - 当我们为现有表添加标识列时排序如何工作
- python - 为什么python显示异常行为而不是逐行读取代码?