使用Map/Reduce将一个字段合并到现有集合中的MongoDB

4
我有一个MongoDB数据库,其中包含2个集合:
  • groups:{group_slug,members}
  • users:{id,display name,groups}
所有对组的更改都通过更改组的成员数组以包括用户ID来完成。
我想通过使用map/reduce将这些更改同步到用户集合中。如何将map/reduce的结果输出到现有集合中(但不合并或减少)。
我的现有代码在这里:https://gist.github.com/morgante/5430907

1
由于MapReduce无法更改现有的集合或文档,因此您需要将其作为第二步执行(读取MapReduce结果并将其应用于现有集合)。 - WiredPrairie
1个回答

2
我该如何将map/reduce的结果输出到现有的集合中?
你真的不能这样做。这也不是建议的行为。还有其他解决方案:
解决方案 #1:
1. 将map/reduce的结果输出到一个临时集合中 2. 运行一个后续任务,从临时集合更新主数据存储 3. 清理临时集合
老实说,这是一种安全的方法。您可以在整个循环中实现一些基本的重试逻辑。
解决方案 #2:
1. 将更改放在队列中。(例如,“用户订阅组”) 2. 从单独的工作程序中更新两个表,这些工作程序正在监听队列上的此类事件。
这种解决方案可能需要一个单独的部件(队列),但任何大型系统都会遇到这种非规范化问题。所以这不会是您看到这种情况的唯一地方。

谢谢,我最终采用了解决方案1。 - Morgante Orion Pell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接