【发布时间】:2023-04-02 16:17:01
【问题描述】:
我有很多处理器密集型聚合管道,但实际上唯一的区别是最后几个步骤。
我可以在特定点克隆管道并应用更多聚合以节省冗余部分的时间吗?
例如(警告,这是编造的代码):
collection.aggregate([ // Redundant part of the pipeline
{ $match: query },
{ $project: project },
{ $unwind: unwind },
{ $match: query },
{ $project: project }
], function(err, cursor) { // Unique part of the pipelines
cursor.aggregate([
{ $group: group1}
], cb1);
cursor.aggregate([
{ $group: group2}
], cb2);
cursor.aggregate([
{ $group: group3}
], cb3);
});
我更喜欢在 MongoDB 适配器中的特定点克隆管道而不是使用物理 temporary collection,因为这发生在每个 Node.js 请求上,它可以同时拥有多个用户,而 $out 不是实际上是为了像这样的临时存储。
【问题讨论】:
标签: node.js mongodb aggregation-framework