4

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

  • 组:{ group_slug,成员 }
  • 用户:{ id,显示名称,组 }

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

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

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

4

1 回答 1

2

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

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

解决方案#1:

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

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

解决方案#2:

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

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

于 2013-04-22T07:35:03.927 回答