mongodb将聚合输出写入集合而不消除先前的数据

时间:2017-11-20 14:40:09

标签: node.js mongodb aggregation-framework

我有一个user集合和一个job集合。无论什么时候插入新作业,我都会运行一个聚合管道查询,它会输出我未来工作所需的文档列表。

使用$out运算符,我可以编写,让我们说match集合。现在,只要插入新作业并且查询再次运行,新输出就会清除match集合的所有先前数据。这不是我想要的,而是按照MongoDB中的documented工作。

为了使我的数据持久,我可以在我的应用程序中调用toArray()然后写入新的集合。但据我所知,这不会扩展到10,000到1M的文档。我的问题是,我可以(可能?)解决这个特定的问题而不会给内存带来太大的负担吗?  像光标一样的bulkInsert?

虽然有点延迟计算但不会受到太大影响

这是我的管道结构。

// ... previous stages
const stage7 = {
  $out: 'match'
}
....
collection.aggregate(
  [stage1, stage2, stage3, stage4, stage5, stage6, stage7],
  (err, result) => {
    if (err) {
      console.log('agg failed error ', err)
      throw new Error('aggregation failed to write in match db', err)
    }
    console.log('write to db aggregation done', result)
  }
)

1 个答案:

答案 0 :(得分:0)

您可以使用$ merge,因为它现在可从MongoDB 4.2及更高版本开始使用。

文档链接:$merge

例如:

db.collection.aggregate([
    {
        $merge: {
            into: "your_output_collection",
            on: [
                "_id"
            ]
        }
    }
])