如何使用PHP在MongoDB上执行JS代码


How to execute JS code on MongoDB using PHP

如何使用PHP在MongoDB上执行一小段JS代码,最好使用laravelmongodb驱动程序,但这不是一个硬性要求。

var size = 0;
db.mycollection.find( { project_id: 151 } ).forEach(function(obj) {
    var curr = Object.bsonsize(obj); 
    size = size + curr;
})
print(size);

这是否需要转换为存储函数并不重要,只要它能够在共享的MongoDB上运行,并且项目ID(在本例中为151)不是固定的。如果有人知道一个更好的函数或解决方案,我也可以,只要我能计算出给定project_id的所有对象的大小。

对这件事有意见吗?

如果您使用的是带有mongodb<4.0,您仍然可以使用eval命令:

自从mongoDB 3.0以来,它就被弃用了,我不知道未来的版本是否会允许替代。

MongoDB'Driver'Manager::executeCommand()方法将帮助您执行eval命令。

举个例子:

$jscode = new 'MongoDB'BSON'Javascript(<<<'NOWDOC'
var size = 0;
db.mycollection.find( { project_id: 151 } ).forEach(function(obj) {
    var curr = Object.bsonsize(obj); 
    size = size + curr;
})
return size;
NOWDOC
);

请注意,print函数在求值期间不会写入任何输出,而是使用return返回值。

执行可能是:

$manager = new 'MongoDB'Driver'Manager($uri, $uriOptions, $driverOptions);
$result = $manager->executeCommand('dbname', new 'MongoDB'Driver'Command(['eval' => $jscode]))->toArray();
var_dump($result[0]["retval"]); // returned size (int)
var_dump($result[0]['ok']); // 1 (double)

注意:要执行JS,您必须具有良好的权限(管理员角色)