我的聚合中有以下管道: $group: { _id: { $dateToString: { format: '%Y-%m-%d', date: '$created_at' } }, num: { $sum: 1 }} 这将返回按数据分组的文档总和,如下所示: [ { "_id": "2015-04-21", "num": 1871 }] 现在我想
$group: { _id: { $dateToString: { format: '%Y-%m-%d', date: '$created_at' } }, num: { $sum: 1 } }
这将返回按数据分组的文档总和,如下所示:
[ { "_id": "2015-04-21", "num": 1871 } ]
现在我想将输出更改为这样的:
[ ["2015-04-21", 1871] ]
这在聚合管道中是否可行?或者我是否必须编写自己的转换方法?
您可以在管道中使用$addToSet
和
$setUnion
运算符,如下所示:
db.collection.aggregate([ { "$group": { "_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$created_at" } }, "num": { "$sum": 1 } } }, { "$group": { "_id": "$_id", "A": { "$addToSet": "$_id" }, "B": { "$addToSet": "$num" } } }, { "$project": { "_id": 0, "finalArray": { "$setUnion": [ "$A", "$B" ] } } } ]);
输出:
/* 0 */ { "result" : [ { "finalArray" : ["2015-04-21", 1871] } ], "ok" : 1 }