【发布时间】:2016-01-30 05:40:48
【问题描述】:
我的数据库中有如下所示的对象:
{
"_id": ObjectId("563f8c320ef987c122aeeb4a"),
"num": 1515,
"createdAt": ISODate("2015-10-29T21:14:26.477Z"),
}
我想编写一个聚合,按特定 ID 对所有内容进行分组,并对今天、本周和本月的总数进行汇总,然后在一个查询中完成。我为此任务编写了三个单独的查询,但我想知道是否可以提高效率并在一个查询中完成。
编辑
有人提到 mapReduce 作为解决方案。这似乎是一个有前途的解决方案,但我无法从一个简单的查询中得到任何返回。以下是我尝试过的:
var o = {};
o.map = function () { emit( this.num, this.createdAt ) }
o.reduce = function (k, vals) { return vals }
o.query = {
_id: req.user._id
}
Submission.mapReduce(o, function (err, results) {
console.log(results)
})
控制台记录一个空数组。我也尝试将_id 转换为猫鼬对象ID,但它仍然返回一个空数组。
【问题讨论】:
-
您必须编写一个 map reduce 查询来实现这一点。
-
@Jaco 我尝试了 map reduce,但没有看到正确的结果。你熟悉在 mongoosejs 中使用 map reduce 吗?
-
查看 Blakes 的回答,这是一种更优雅的方式来实现您想要的,而无需使用 map reduce 查询。
标签: node.js mongodb mongodb-query aggregation-framework