我的模型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。
答案 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。一开始它可能会令人生畏,但花一个小时左右阅读文档并理解这些示例,你会很快掌握它。