【问题标题】:Can I clone a MongoDB aggregation pipeline and aggregate some more?我可以克隆 MongoDB 聚合管道并聚合更多吗?
【发布时间】: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


    【解决方案1】:

    雷德桑德罗,

    您可以通过为聚合查询的“公共”部分创建聚合查询来完成您想要的。

    然后,您可以使用 $out 将“常见步骤”的输出写入“新”集合。 http://docs.mongodb.org/manual/reference/operator/aggregation/out/.

    完成后,您可以将聚合框架查询应用于新创建的集合

    【讨论】:

    • 我之前读到过这个,但是对于每个请求上发生的聚合来说,这听起来很密集。 (我会将请求内容添加到更具体的问题中。)我们需要创建和删除随机集合,以免一个请求的临时集合与另一个请求的临时集合污染。我想这可以节省内存但会浪费时间,除非查询量很大。是否有关于此开销的数据或文档?例如。这什么时候开始变得可行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 2020-09-20
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    相关资源
    最近更新 更多