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

标签 node.js mongodb mapreduce mongoose

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

相关文章:

Node 中的 C# HMAC Sha256 等效项

javascript - Puppeteer:打开一个页面,获取数据,返回上一页,进入新页面获取数据

javascript - 如何创建一个基于数组中存储的用户 ID 的简单“点赞”按钮?

Hadoop MapReduce InputFormat 已弃用?

javascript - 如果我使用的是 webpack,我是否需要实时主机服务器上的 node_modules 文件夹?

node.js - pg.Pool 不是构造函数

node.js - 为什么 .find() 显示快速的 MongoDB 事务时间和慢的 node.js 事务时间,而 .findOne() 显示完全相反的情况?

node.js - 将 MongoDB 返回的对象转换为 bar?

java - Java:读取hadoop reducer的输出文件

scala - 在 spark 中设置 textinputformat.record.delimiter