Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何合并和汇总MongoDB的结果_Javascript_Node.js_Mongodb_Mongoose_Mongodb Query - Fatal编程技术网

Javascript 如何合并和汇总MongoDB的结果

Javascript 如何合并和汇总MongoDB的结果,javascript,node.js,mongodb,mongoose,mongodb-query,Javascript,Node.js,Mongodb,Mongoose,Mongodb Query,我按不同日期对数据进行切片,例如: [{ "_id" : ObjectId("5de4103552f7535d31c2e3e1"), "attributedUnitsOrdered14d" : 0, "clicks" : 1, "targetId" : NumberLong(209434056899554), "campaignId" : NumberLong(106574821410524), "query" : "miami hurricane

我按不同日期对数据进行切片,例如:

[{
    "_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
}]
这些是同一个活动的相同报告,但针对不同的日子。我想获取字段的总和
单击
&
属性监视14D
&将其作为单个对象返回,如下所示:

{
    "_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"),
}
我可以使用中间件(pre-hook for
find
query)或类似的东西吗

似乎一个简单的例子就足够了:

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"},
        }
    }
])
似乎一个简单的例子就足够了:

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

是否有一种方法可以实现我使用lodash所需的结果?是否有一种方法可以实现我使用lodash所需的结果?