MongoDB "forEach"命令将在哪里运行?



Scope:

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

为了解决这些问题,我目前正在本地(而不是在服务器上)在 Robomongo 工具上执行 foreach 命令,但该过程花费的时间比我预期的要长一些。

这是我正在运行的用于固定集合价格的命令之一。

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

故障 排除:

经过快速故障排除后,该工具似乎在客户端而不是所有服务器端运行此操作(这会更快)。快速浏览任务管理器显示Robomongo进程的网络使用率高达5.5 MB/s。

问题:

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

您可以使用 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 的信息在这里。请注意,db.eval 将对数据库进行全局写锁定。

最新更新