我有一个包含2个集合的MongoDB数据库:
> groups:{group_slug,members}
> users:{id,display name,groups}
对组的所有更改都是通过更改组的成员数组以包括用户ID来完成的.
我想使用map / reduce将这些更改同步到users集合.如何将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:
>将更改放在队列中. (即“用户订阅群组”)
>从正在侦听队列上的此类事件的分隔工作者更新两个表.
这个解决方案可能需要一个单独的部分(队列),但任何大型系统都会出现这种非规范化问题.所以这不会是你看到这个的唯一地方.