我有一个包含 2 个集合的 MongoDB 数据库:
- 组:{ group_slug, 成员}
- 用户:{ id、显示名称、组}
对组的所有更改都是通过更改组的成员数组以包含用户 ID 来完成的。
我想使用 map/reduce 将这些更改同步到用户集合。我如何将 map/reduce 的结果输出到现有集合中(但不合并或减少)。
我现有的代码在这里:https://gist.github.com/morgante/5430907
最佳答案
How can I output the results of map/reduce into an existing collection
你真的不能这样做。这也不是真正建议的行为。还有其他解决方案:
解决方案 #1:
- 将 map/reduce 输出到一个临时集合中
- 运行后续任务,根据临时集合更新主数据存储
- 清理临时集合
老实说,这是一种安全的方法。您可以在整个循环中实现一些基本的重试逻辑。
解决方案#2:
- 将更改放入队列。 (即“用户订阅群组”)
- 从正在监听队列中此类事件的独立工作人员更新两个表。
这个解决方案可能需要一个单独的部分(队列),但是任何大型系统都会有这样的非规范化问题。所以这不会是您看到的唯一地方。
关于node.js - MongoDB 使用 Map/Reduce 将一个字段合并到现有集合中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16135709/