给出类似于:
的大量(数百万+)文档集合{ _id : ObjectId, "a" : 3, "b" : 5 }
直接在服务器上处理这些文档的最有效方法是什么,并将结果添加到同一集合中的每个文档中?例如,添加其值等于c
的密钥a+b
。
{ _id : ObjectId, "a" : 3, "b" : 5, "c" : 8 }
我更喜欢在shell中执行此操作。
似乎find().forEach()
会浪费数据库和shell之间的传输时间,mapReduce()
似乎打算将对象组处理成聚合数据(尽管我可能会误解)。
编辑:我更喜欢没有阻止的解决方案,如果有的话(除了在客户端上使用光标)...
答案 0 :(得分:2)
“db.eval()用于评估数据库服务器上的函数(用JavaScript编写)。 如果您需要轻轻触摸大量数据,这非常有用。在那种情况下,数据的网络传输可能成为瓶颈。“
文档中有一个如何使用它的示例,它与您尝试的非常相似。
答案 1 :(得分:1)
forEach
是您的最佳选择。我会在服务器上运行它(从shell)来减少延迟。