我正在mongo中执行聚合查询,如下所示:
db.getCollection('snapshots').aggregate([
{ '$match': { 'user_id' : ObjectId("999999") } },
{ '$sort': { 'timestamp': -1 } },
{
'$group': {
'_id': '$code',
'docId': { '$first' : '$_id' },
}
},
{ '$skip': 0 },
{ '$limit': 10 },
]);
您可以看到我按“timestamp”降序排序文档,然后按“代码”分组,并获取第一个文档。
每个代码一个文档,作为最新文档。但最后我需要整个原始文件。
我看到我可以在我的聚合管道中添加$$ ROOT步骤以获取原始文档,但它似乎使用了 LOT 的内存。例如:
'$group': {
'_id' : '$ig_ad_code',
'docId': { '$first' : '$_id' },
'doc': { '$first' : '$$ROOT' },
}
我想这是因为Mongo正在检索进入聚合管道的每个文档的整个文档,而不仅仅是我要求的10x文档。我有大约500万条记录,所以我需要保持管道阶段的精益。
我目前的想法是从上面的步骤获取我的10x文档ID,并将它们提供给一个简单的“find()”步骤。这是唯一的选择吗?是否有另一个管道可以根据前一个聚合步骤中的字段检索文档?
谢谢!