当前位置: 首页 > 知识库问答 >
问题:

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

龙嘉誉
2023-03-14

我有两个收藏(A和B),每个收藏约70000份文档。如果我比较A和B,95%的文档是相同的,只有5%是不同的。每个文档的结构在A和B中完全相同。A是一个固定集合,B是一个临时集合。我想将B合并到A中。如果A中存在来自B的文档--

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

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

共有1个答案

越国源
2023-03-14

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

假设您有95%相同的文档,您想将A. dateLastSeen更新为B. dateLastSeen。单个更新将是:~66,500次更新。留下约3500个插入。

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

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

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

 类似资料:
  • 我不知道如何监听Firestore db中的更改和更新中的项。 其中包括聊天模型、活动和适配器。 一旦值“isseen”更改为“true”,它就应该显示在发件人的电话上。

  • 主要内容:update() 方法,save() 方法在 MongoDB 中,可以使用 update() 和 save() 方法来更新集合中的文档。其中 update() 方法可以更新现有文档中的值,而 save() 方法则可以使用传入文档来替换已有文档。 update() 方法 update() 方法用于更新现有文档中的值,其语法格式如下: db.collection_name.update(     <query>,     <update>,

  • 我有两个集合A和B,我在另一个集合B中有一个字段的引用,因此将两个结果聚合到: 集合A中的文件是:

  • 如何在Cloud Firestore中查询每个CollectionGroup的最新文档? 组中每个收藏中只有一个文档,最近的!

  • 本文向大家介绍MongoDB查询以公式更新集合中文档的每个字段,包括了MongoDB查询以公式更新集合中文档的每个字段的使用技巧和注意事项,需要的朋友参考一下 要使用公式更新集合中文档的每个字段,请使用MongoDB update()。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是使用公式更新集合中文档的每个字段的查询- 在find()

  • 在更新这个庞大的集合时,下面的迁移代码似乎被卡住了。 应用程序日志的最后几行表示已调用更改集,但随后的更改集未被调用。 2021-05-11 08:00:29.385INFO[product-service,,] 1 --- [ main]c.a.a.mongock.changelog.迁移:将租户添加到产品 2021-05-11 08:00:29.576信息[产品服务,,,]1---[br>ma