gpt4 book ai didi

mongodb - 如何将 Mongo DB 聚合结果附加到现有集合?

转载 作者:IT老高 更新时间:2023-10-28 13:18:59 24 4
gpt4 key购买 nike

我正在尝试使用以下代码对现有的 Mongo DB 集合执行多次插入

db.dados_meteo.aggregate( [
{ $match : { "POM" : "AguiardaBeira" } },
{ $project : {
_id : { $concat: [
"0001:",
{ $substr: [ "$DTM", 0, 4 ] },
{ $substr: [ "$DTM", 5, 2 ] },
{ $substr: [ "$DTM", 8, 2 ] },
{ $substr: [ "$DTM", 11, 2 ] },
{ $substr: [ "$DTM", 14, 2 ] },
{ $substr: [ "$DTM", 17, 2 ] }
] },
"RNF" : 1, "WET":1,"HMD":1,"TMP":1 } },
{ $out : "dados_meteo_reloaded" }
] )

但是每次我更改 $match 参数并进行新的聚合时,Mongo DB 都会删除以前的文档并插入新的结果。

你能帮帮我吗?

最佳答案

开始Mongo 4.2,新的$merge聚合运算符(类似于 $out)允许将聚合管道的结果合并到指定的集合中:

鉴于此输入:

db.source.insert([
{ "_id": "id_1", "a": 34 },
{ "_id": "id_3", "a": 38 },
{ "_id": "id_4", "a": 54 }
])
db.target.insert([
{ "_id": "id_1", "a": 12 },
{ "_id": "id_2", "a": 54 }
])

$merge 聚合阶段可以这样使用:

db.source.aggregate([
// { $whatever aggregation stage, for this example, we just keep records as is }
{ $merge: { into: "target" } }
])

生产:

// > db.target.find()
{ "_id" : "id_1", "a" : 34 }
{ "_id" : "id_2", "a" : 54 }
{ "_id" : "id_3", "a" : 38 }
{ "_id" : "id_4", "a" : 54 }

请注意,$merge 运算符带有 many options指定如何合并与现有记录冲突的插入记录。

在这种情况下(使用默认选项),这样:

  • 保留目标集合的现有文档({ "_id": "id_2", "a": 54 } 就是这种情况)

  • 当文档不存在时,将聚合管道的输出中的文档插入到目标集合中(基于 _id - 这是 { "_id"的情况: "id_3", "a": 38 })

  • 当聚合管道生成存在于目标集合中的文档时替换目标集合的记录(基于 _id - 这是 { "_id": "id_1 ", "a": 12 } 替换为 { "_id": "id_1", "a": 34 })

关于mongodb - 如何将 Mongo DB 聚合结果附加到现有集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28741457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com