Mongoose中的Group / MapReduce 3.6.15

时间:2013-09-07 12:40:37

标签: mongodb mongoose

我的模型Record看起来像这样:

{
    _id: '52278952a4bb5a7415000002',
    owner_id: '52278952a4bb5a7415000001',
    state: 'some_string'
}

我希望在GROUP owner_id Record.state = 'some_string'之前owner_id收集记录,并为每个所有者计算。换句话说,我想为每个所有者计算所有带有state ='some_string'的记录(在记录中指定为mongoose group)。我怎么能做到这一点?我在谷歌搜索了mongoose map/reduce$project,但找不到任何我能理解的内容 - 并且根据我的知识将地图放到新的集合中,我不想这样做。我无法在mongoose docs中找到任何信息。其他示例在查询中包含一些奇怪的关键字,如Model.agregate(...)等。任何人都能为我提供这个问题的良好工作示例吗?这应该很简单我猜...我发现有方法{{1}}方法,但无法找到如何使用它。

我使用mongoose 3.6.15。

1 个答案:

答案 0 :(得分:1)

使用aggregate和Mongoose执行此操作:

Record.aggregate([
    // Filter the docs to just those you want to include
    {$match: {state: 'some_string'}},
    // Group by owner_id and count them per owner
    {$group: {_id: '$owner_id', count: {$sum: 1}}}
], function (err, results) { ... });

aggregate上的文档可以找到here。一开始它可能会令人生畏,但花一个小时左右阅读文档并理解这些示例,你会很快掌握它。