MongoDB“forEach”命令在哪里运行?

时间:2014-11-24 13:41:03

标签: mongodb mongodb-query

范围:

我有几个需要修复的MongoDB集合" (托管在服务器上的价格标准化和某些属性值和名称的更改)。

要解决这些问题,我目前正在foreach command本地(不在服务器上)执行Robomongo tool,但这个过程比我预期的要长一些。

这是我正在运行的一个命令来修复集合的价格。

 db.Products_PoC.find().forEach( function(myDoc) {
    myDoc.price = (myDoc.price.toFixed(2)) * 100;
    db.Products_PoC.save (myDoc);
});

故障排除:

在快速排除故障后,似乎该工具在客户端运行此操作,而不是所有服务器端(这会更快)。快速浏览一下任务管理器,可以看出Robomongo进程的网络使用速度高达5.5 mb / s。

问题:

有什么方法可以在服务器上运行这样的命令,而不是在本地运行?

1 个答案:

答案 0 :(得分:4)

您可以使用 eval 函数在MongoDB服务器上运行代码。例如:

db.eval(function() { 
     db.Products_PoC.find().forEach( function(myDoc) {
        myDoc.price = (myDoc.price.toFixed(2)) * 100;
        db.Products_PoC.save (myDoc);
      });
    });

有关eval here的更多信息。请注意 db.eval 将对您的数据库进行全局写锁定。