我创建了一个Stored JS函数,据说可以更快更有效地完成一项非常繁琐的工作。经过长时间的投入工作后,我想出了完成这项功能。
所以我的函数是假设myFunc();
db.system.js.save(
{
_id : "myFunc" ,
value : function (param1,param2,param3....){ ... }});
完成此功能后,使用Mongo Shell进行测试
db.eval("myFunc('a','b'...)");
和
db.loadServerScripts();
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) }
有人告诉我,我做错了什么...... !!
答案 0 :(得分:2)
您有类似的问题:Calling a stored procedure via PHP in MongoDB
无论如何mongodb docs说:
注意如果,我们不建议使用服务器端存储的函数 可能的。
更好的做法是使用MongoDB::execute直接执行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'];
来自:http://php.net/manual/en/mongodb.execute.php
使用MongoCode对象,您可以使用作用域并使用JS创建PHP对象,并且您可以在vcs上的PHP项目中使用此JS。
答案 1 :(得分:0)
我发现简单的解决方法:
var out = db.eval("abc(param1,param2..)"); return(JSON.stringify(out));
我知道实现这一点并不是最好的方法,但直到我找到更好的解决方法(因为Stored JS不是一个明智的方法),这是我唯一的方法。如果发生任何故障,将发布。