【问题标题】:MongoDB merge one field into existing collection with Map/ReduceMongoDB 使用 Map/Reduce 将一个字段合并到现有集合中
【发布时间】:2013-04-21 20:12:22
【问题描述】:

我有一个包含 2 个集合的 MongoDB 数据库:

  • 群组:{ group_slug, members }
  • 用户:{ id、显示名称、组 }

对组的所有更改都是通过更改组的成员数组以包含用户 ID 来完成的。

我想通过使用 map/reduce 将这些更改同步到用户集合。如何将 map/reduce 的结果输出到现有集合中(但 合并或归约)。

我现有的代码在这里:https://gist.github.com/morgante/5430907

【问题讨论】:

  • 由于 MapReduce 无法对现有集合或文档进行更改,因此您需要将其作为第二步(读取 mapreduce 结果并将其应用于您现有的集合)。

标签: node.js mongodb mapreduce mongoose


【解决方案1】:

如何将 map/reduce 的结果输出到现有集合中

你真的不能这样做。这也不是真正建议的行为。还有其他解决方案:

解决方案 #1:

  • 将 map/reduce 输出到临时集合中
  • 运行后续任务,从临时集合中更新主数据存储
  • 清理临时集合

老实说,这是一种安全的方法。你可以在整个循环中实现一些基本的重试逻辑。

解决方案 #2:

  • 将更改放入队列。 (即“用户订阅群组”
  • 从在队列​​中监听此类事件的单独工作人员更新这两个表。

这个解决方案可能需要一个单独的部分(队列),但是任何大型系统都会有这样的非规范化问题。所以这不会是你看到这个的唯一地方。

【讨论】:

  • 谢谢,我最终使用了解决方案 1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 2011-12-14
  • 1970-01-01
  • 2023-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多