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 PHP驱动程序:对存储的JS使用Execute_Php_Mongodb_Mongodb Php - Fatal编程技术网

MongoDB PHP驱动程序:对存储的JS使用Execute

MongoDB PHP驱动程序:对存储的JS使用Execute,php,mongodb,mongodb-php,Php,Mongodb,Mongodb Php,我创建了一个存储的JS函数,它可以更快、更高效地完成一项非常繁琐的工作。经过长时间的工作,我终于完成了这个功能 所以我的函数是假设myFunc() 有一次我完成了这个功能,并用Mongo Shell作为测试工具进行了测试 db.eval("myFunc('a','b'...)"); 及 我很满意它会起作用, 现在问题开始了,如何用PHP实现这一点 $cmd = 'db.eval("myFunc(\'a\',\'b\'...);");'; $data = $mongo_db->execut

我创建了一个存储的JS函数,它可以更快、更高效地完成一项非常繁琐的工作。经过长时间的工作,我终于完成了这个功能

所以我的函数是假设myFunc()

有一次我完成了这个功能,并用Mongo Shell作为测试工具进行了测试

db.eval("myFunc('a','b'...)");

我很满意它会起作用, 现在问题开始了,如何用PHP实现这一点

$cmd = 'db.eval("myFunc(\'a\',\'b\'...);");';
$data = $mongo_db->execute($cmd);
var_dump($data);
$data没有任何结果

array(2) { ["retval"]=> NULL ["ok"]=> float(1) } 

有人告诉我我到底做错了什么

您在以下位置有一个类似的问题:

不管怎样,正如上面所说:

注意:如果出现以下情况,我们不建议使用服务器端存储函数 可能

更好的做法是使用直接执行JS,而不是将其存储在db.system.JS中,然后调用它:

$func = 
    "function(greeting, name) { ".
        "return greeting+', '+name+', says '+greeter;".
    "}";
$scope = array("greeter" => "Fred");

$code = new MongoCode($func, $scope);

$response = $db->execute($code, array("Goodbye", "Joe"));
echo $response['retval'];
发件人:


使用MongoCode对象,您可以使用作用域并使用JS创建PHP对象,您可以在vcs的PHP项目中使用此JS。我发现的简单解决方法是:

var out = db.eval("abc(param1,param2..)"); return(JSON.stringify(out));

我知道实现这一点根本不可取,但直到我找到更好的解决方法(因为存储JS不是一种可取的方法)之前,这是我唯一的方法。如果出现任何故障,将发布。

请提供可复制和粘贴的完整示例。有。。。不是很有用。我们的代码大约是50 loc。我发现它在里面有两个查询。但问题是通过一个变通办法解决的。:)还是谢谢。。!!?那你如何在没有JS的情况下制作MapReduce呢?你必须小心服务器上的负载,但如果你使用MongoDB,你必须使用JS。Map reduce不是JS在这个意义上,MR运行完全不同,因为它是一个接受JS回调的数据库命令。因此,我理解不建议使用JS存储功能,但我有一个强大的服务器来支持我的需要,此外,我还试图避免在请求服务器上进行计算。也可以使用无锁进行评估。
$func = 
    "function(greeting, name) { ".
        "return greeting+', '+name+', says '+greeter;".
    "}";
$scope = array("greeter" => "Fred");

$code = new MongoCode($func, $scope);

$response = $db->execute($code, array("Goodbye", "Joe"));
echo $response['retval'];
var out = db.eval("abc(param1,param2..)"); return(JSON.stringify(out));