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

时间:2013-04-21 20:12:23

标签: node.js mongodb mapreduce mongoose

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

  

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

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

解决方案#1:

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

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

解决方案#2:

  • 将更改置于队列中。 (即“用户订阅群组”
  • 从正在侦听队列中此类事件的分隔工作者更新两个表。

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