MongoDB“forEach”命令将在哪里运行?
范围: 我有几个MongoDB集合,需要固定价格标准化,并更改服务器上托管的某些属性值和名称 为了解决这些问题,我目前正在本地而不是在服务器上执行,但是这个过程比我预期的要长一点 这是我正在运行的命令之一,用于确定集合的价格MongoDB“forEach”命令将在哪里运行?,mongodb,mongodb-query,Mongodb,Mongodb Query,范围: 我有几个MongoDB集合,需要固定价格标准化,并更改服务器上托管的某些属性值和名称 为了解决这些问题,我目前正在本地而不是在服务器上执行,但是这个过程比我预期的要长一点 这是我正在运行的命令之一,用于确定集合的价格 db.Products_PoC.find().forEach( function(myDoc) { myDoc.price = (myDoc.price.toFixed(2)) * 100; db.Products_PoC.save (myDoc); })
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);
});
});
更多关于评估。请注意,db.eval将对数据库执行全局写锁。该锁是在数据库级别还是在集合级别发出的?有没有办法运行Collection.Eval或其他只锁定特定集合的方法?@MarcelloGrechiLins,我相信它是在数据库级别上运行的,不确定是否可以在集合级别上运行。但您可以使用带有nolock选项的命令。