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

我有一个包含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:

>将更改放在队列中. (即“用户订阅群组”)
>从正在侦听队列上的此类事件的分隔工作者更新两个表.

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

点赞