Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB“forEach”命令将在哪里运行?_Mongodb_Mongodb Query - Fatal编程技术网

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

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); })

范围:

我有几个MongoDB集合,需要固定价格标准化,并更改服务器上托管的某些属性值和名称

为了解决这些问题,我目前正在本地而不是在服务器上执行,但是这个过程比我预期的要长一点

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

 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选项的命令。