Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB合并了2个非常相似的集合。现有文档-更新,新文档-插入_Mongodb_Collections_Merge_Upsert - Fatal编程技术网

MongoDB合并了2个非常相似的集合。现有文档-更新,新文档-插入

MongoDB合并了2个非常相似的集合。现有文档-更新,新文档-插入,mongodb,collections,merge,upsert,Mongodb,Collections,Merge,Upsert,我有两个收藏(A和B),每个收藏约70000份文档。如果我比较A和B,95%的文档是相同的,只有5%是不同的。每个文档的结构在A和B中完全相同。 A是一个常量集合,B是一个临时集合。我想把B合并成A。 如果来自B的文档仅存在于-->更新“dateLastSeen”字段中。如果A-->中不存在B中的文档,请将此文档插入A …我正在使用Python驱动程序(如果有必要的话) 最有效的方法是什么? 谢谢。就查询而言,最有效的方法是批量更新每个日期需要更新的所有日期,并批量插入所有需要插入的文档 假设您

我有两个收藏(A和B),每个收藏约70000份文档。如果我比较A和B,95%的文档是相同的,只有5%是不同的。每个文档的结构在A和B中完全相同。 A是一个常量集合,B是一个临时集合。我想把B合并成A。 如果来自B的文档仅存在于-->更新“dateLastSeen”字段中。如果A-->中不存在B中的文档,请将此文档插入A

…我正在使用Python驱动程序(如果有必要的话)

最有效的方法是什么?
谢谢。

就查询而言,最有效的方法是批量更新每个日期需要更新的所有日期,并批量插入所有需要插入的文档

假设您有95%的文档要将A.dateLastSeen更新为B.dateLastSeen。单次更新可能是:~66500次更新。留下约3500个插页

在内存中加载所有B和A,然后处理是一种可能性

您可以创建批量插入列表,并在a中缺少B中的文档时进行追加。 还有一个由
dateLastSeen
键入的批量更新字典,其中包含要更新的文档列表。取决于任何匹配的
dateLastSeen
值的概率,以确定这是否真的值得


或者,简化它,接受高查询成本,开始批量处理B(1000个),在A中加载等效的1000个,并比较和更新/批量插入。减少内存打印,总共只添加约210个额外查询来获取数据批(从B、A和批量插入分别约70个、70个和70个)。

如果它们也有相同的ID,比较它们您尝试了什么?看起来你可以得到两者的列表,并在内存中比较它们,并根据需要更新该字段。你选择了哪个选项?