我有一个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)
}
)
答案 0 :(得分:0)
您可以使用$ merge,因为它现在可从MongoDB 4.2及更高版本开始使用。
文档链接:$merge
例如:
db.collection.aggregate([
{
$merge: {
into: "your_output_collection",
on: [
"_id"
]
}
}
])