MongoDB:修改服务器上的每个文档

时间:2012-09-11 18:09:23

标签: mongodb

给出类似于:

的大量(数百万+)文档集合
{ _id : ObjectId, "a" : 3, "b" : 5 }

直接在服务器上处理这些文档的最有效方法是什么,并将结果添加到同一集合中的每个文档中?例如,添加其值等于c的密钥a+b

{ _id : ObjectId, "a" : 3, "b" : 5, "c" : 8 }

我更喜欢在shell中执行此操作。

似乎find().forEach()会浪费数据库和shell之间的传输时间,mapReduce()似乎打算将对象组处理成聚合数据(尽管我可能会误解)。

编辑:我更喜欢没有阻止的解决方案,如果有的话(除了在客户端上使用光标)...

2 个答案:

答案 0 :(得分:2)

来自MongoDB Docs on db.eval()

“db.eval()用于评估数据库服务器上的函数(用JavaScript编写)。 如果您需要轻轻触摸大量数据,这非常有用。在那种情况下,数据的网络传输可能成为瓶颈。“

文档中有一个如何使用它的示例,它与您尝试的非常相似。

答案 1 :(得分:1)

forEach是您的最佳选择。我会在服务器上运行它(从shell)来减少延迟。