Javascript函数用于在mongodb集合中保存现有字段(迁移)中的新字段

时间:2014-10-06 06:43:28

标签: mongodb spring-data-mongodb mongodb-java

我们对应用程序进行了设计更改,以满足一些新的要求。设计更改迫使我们迁移mongodb集合中的一个,而不是具有单独的字段,必须创建派生的JSON字符串作为现有字段中的字段。

最终用户在UI中执行操作(如保存更改)将调用迁移过程。但是,这一个动作可能会更新数千个文档。所以我们想编写要在服务器端执行的Javascript代码,这样我们就可以避免将许多记录加载到应用程序中。

但是我们遇到的问题是,无法使用eval调用java脚本函数,因为集合是分片的。我们无法考虑的其他选项是使收集无分片,因为迁移必须在实时系统上进行。

如果您知道任何替代方法,请帮助我们。

示例迁移:ExampleDoc(集合)具有字段a1,a2,b1和b2。迁移将创建一个名为fieldJSON的新字段:{a:"",b:""}。这里a和b来自现有字段a1,a2,b1和b2。

1 个答案:

答案 0 :(得分:1)

好的,现在我明白了

  • 您想要在分片的同一个集合中创建一个新字段;
  • 此新字段的内容由现有字段生成;
  • 您不希望将这些现有字段从数据库提取到应用程序,以便处理可能因为数据量大;
  • 您无法调用eval数据库命令,因为它是分片集合;
  • 你无法取消当前收藏的分片。

然后,是否可以通过mapReduce实现意图?

  1. 查询要更新的确切文档;
  2. 通过指定{out:{merge:<collectionName>, sharded:true}}等参数来映射,缩小然后覆盖此集合的原始文档。