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 将对数据库进行全局写锁定。