MongoDB - 聚合 - $$ ROOT使用太多内存

时间:2017-10-09 09:07:19

标签: mongodb aggregation-framework

我正在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()”步骤。这是唯一的选择吗?是否有另一个管道可以根据前一个聚合步骤中的字段检索文档?

谢谢!

0 个答案:

没有答案