首页 > 解决方案 > MongoDB保存聚合结果并检索保存的结果

问题描述

我的 mongo 版本是 3.4

我正在运行一个复杂的聚合并将结果写入使用$out阶段的集合。

我想要做的是,如果该聚合之前运行并且结果存在于目标集合中,则只需返回保存的结果而不重新运行整个管道。

问题 1 是,当$out使用聚合时,聚合不返回任何结果,所以我必须向目标集合发送单独的查询来检索它们。

问题 2 是,我需要另一个查询来检查之前是否运行过聚合。

是否可以将所有 3 个查询组合到一个管道中,所以它会:

  1. 检查 outCollection,如果给定 user_id 的结果存在,则返回它
  2. 如果没有,运行管道并将结果保存到 outCollection
  3. 返回聚合结果

我目前的管道看起来像:

db.getCollection('sourceCollection').aggregate([
    {
        $match: {
            user_id: "myUserId"
        }
    },...//perform various steps
    {
        $out: "outCollection"
    }],{
    allowDiskUse: true
})

结果保存到 outCollection 的文档中,例如:

{ user_id: "myUserId", aggResult: [...] }

标签: mongodbaggregation-framework

解决方案


推荐阅读