没有 $match 的聚合查询
Aggregate query with no $match
我有一个 collection,其中来自不同 collection 的独特文档可以一遍又一遍地出现(在下面的示例 item
中),具体取决于用户分享它们的程度.我想创建一个聚合查询来查找共享最多的文档。没有必要 $match 因为我不符合特定条件,我只是查询最共享的。现在我有:
db.stories.aggregate(
{
$group: {
_id:'item.id',
'item': {
$first: '$item'
},
'total': {
$sum: 1
}
}
}
);
然而这只有returns1个结果。我突然想到我可能只需要做一个简单的 find
查询,但我希望汇总结果,以便每个结果都有项目,总计是它在 collection 中出现的次数。
故事中的文档示例 collection:
{
_id: ObjectId('...'),
user: {
id: ObjectId('...'),
propertyA: ...,
propertyB: ...,
etc
},
item: {
id: ObjectId('...'),
propertyA: ...,
propertyB: ...,
etc
}
}
users
和 items
也都有自己的 collection。
换行
_id:'item.id'
到
_id:'$item.id'
目前您按常量 'item.id' 分组,因此您只能得到一个文档作为结果。
我有一个 collection,其中来自不同 collection 的独特文档可以一遍又一遍地出现(在下面的示例 item
中),具体取决于用户分享它们的程度.我想创建一个聚合查询来查找共享最多的文档。没有必要 $match 因为我不符合特定条件,我只是查询最共享的。现在我有:
db.stories.aggregate(
{
$group: {
_id:'item.id',
'item': {
$first: '$item'
},
'total': {
$sum: 1
}
}
}
);
然而这只有returns1个结果。我突然想到我可能只需要做一个简单的 find
查询,但我希望汇总结果,以便每个结果都有项目,总计是它在 collection 中出现的次数。
故事中的文档示例 collection:
{
_id: ObjectId('...'),
user: {
id: ObjectId('...'),
propertyA: ...,
propertyB: ...,
etc
},
item: {
id: ObjectId('...'),
propertyA: ...,
propertyB: ...,
etc
}
}
users
和 items
也都有自己的 collection。
换行
_id:'item.id'
到
_id:'$item.id'
目前您按常量 'item.id' 分组,因此您只能得到一个文档作为结果。