如果我有一堆文件,例如
{
_id: mongoId,
subcatId: mongoId,
viewCount: 2
}
_id
是唯一的,但subcatId
不是。
如果我想返回每个subcatId具有最高viewCount的每个文档,我将如何使用Mongoose / MongoDB聚合?
答案 0 :(得分:3)
你可以这样做:
db.test.aggregate([
// Sort the docs by viewCount descending so that the highest ones come first
{$sort: {viewCount: -1}},
// Group by subcatId and take the first doc from each group
{$group: {_id: '$subcatId', doc: {$first: '$$ROOT'}}}
])
在{2.6}中添加了$$ROOT
系统变量,表示在管道中该阶段正在处理的整个文档。所有系统变量都以$$
前缀引用。
对于较旧版本的MongoDB,您需要将$group
所需的每个字段单独添加:
db.test.aggregate([
{$sort: {viewCount: -1}},
{$group: {
_id: '$subcatId',
doc_id: {$first: '$_id'},
viewCount: {$first: '$viewCount'}
}}
])