gpt4 book ai didi

mongodb - 使用更新合并集合

转载 作者:可可西里 更新时间:2023-11-01 10:23:12 26 4
gpt4 key购买 nike

是否可以使用集合 B 中的数据更新集合 A?

背景:这样做的目的是解决 mongodb 缺乏适当原子性的问题。我正在遍历一些日志数据以生成数据聚合,并想知道数据是否与要求输入的内容匹配。而不是执行 two phase commit。 ,我想生成一个批量写入一个持有集合。收集完成后(例如在读取 10000 条记录或读取整个文件后),将数据库中文档的计数与应用程序生成的计数进行比较,如果匹配,则使用临时集合更新大集合.在下次导入开始时清除临时集合。这样,如果进程在任何时候被中断,它在更新阶段发生的可能性就会较小,并且临时收集填充期间的任何错误都将通过删除临时数据并在下次启动时重新启动进程来自动修复。

是否可以使用临时集合中的数据更新主集合?这种更新是否比应用程序的单个更新快得多?


更新:两个集合中的数据看起来像这样(如下)。我希望合并可以根据 eventmonth 找到匹配文档的记录,或者如果不存在则创建一个新记录。然后它会获取每日数字并增加它们。这个想法是,更新临时集合中的计数的过程在每次读取记录时更新一次,因此每个每日计数都是一次写入。完成一批后,我想使用单个 mongodb 命令用临时集合的内容更新主集合。

{
"event": "abc",
"month": "2012-04",
"daily": {
"1": 82,
"2": 6,
"3": 12,
"4": 23,
"5": 62,
...
}
}

最佳答案

这是菜鸟抛出的问题。

根据我从您的问题中获得的信息。我会使用 JS 循环来解决这个问题。

这里有一些可以用作来源的东西。

db.collection_a.find().batchSize(10000).forEach(function(doc){

result = db.collection_b.findOne({'column_b': doc['column_a']});

if (result != null){
db.collection_a.update({'_id': doc['_id']},{
$set:{
'new_column_a': result['column_b']
}
})}

else {
print('Not found ' + doc['column_a'])
}
});

batchsize 可以在第一个函数中更改。

  • 第一个函数查找每个数据集。
  • 第二个函数从每个集合中查找匹配的数据集。

然后 _id 将被更新。最后将新列添加到 collection_a。数据是从集合b中抓取的。

关于mongodb - 使用更新合并集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36460689/

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