Php/docs/mongodb.execute

来自菜鸟教程
跳转至:导航、​搜索

MongoDB::execute

(PECL mongo >=0.9.3)

MongoDB::execute在数据库服务器上运行JavaScript


说明

public MongoDB::execute ( mixed $code [, array $args = array() ] ) : array

MongoDB服务器运行着一个JavaScript引擎。这个方法允许在服务器上执行任意JavaScript代码。如果你想要利用较少资源处理大量集合,或者在服务器上处理一些结果集以减少网络传输,那么这个方法会有用。

在服务器运行JavaScript代码会创建一个写锁定,这意味着它锁定了其他操作的执行。在运行一段耗时较长的代码之前,请考虑到这一点。

这是一个数据库指令的包装,它简单的说相当于:

<?phppublic function execute($code, $args) {    return $this->command(array('$eval' => $code, 'args' => $args));}?>

如果所执行的代码只有一个语句,且只有一行,MongoDB隐含一个return语句。这允许一些直观的行为,比如下面的例子返回"foo":

<?php$db->execute('"foo";');?>

但是下面这两个例子返回null:

<?php$db->execute('"bar"; "foo";'); // 多个语句$db->execute('db.foo.count();'); // 多行?>

为了防止意外的行为,最好不要依赖MongoDB决定你的返回值。而是明确的提供一个return语句。上面的例子中,可以把代码改为:

<?php$db->execute('"bar"; return "foo";');$db->execute('return db.foo.count();');?>

这样第一个语句会返回"foo",第二个语句会返回"foo"集合的长度。


参数

code
MongoCode或要执行的字符串
args
code的参数。


返回值

返回执行结果


范例

Example #1 简单的 MongoDB::execute() 实例

<?php$response = $db->execute("function() { return 'Hello, world!'; }");echo $response['retval'];?>

以上例程的输出类似于:


Hello, world!

Example #2 带参数的 MongoDB::execute() 实例

可选的参数将被传递给JavaScrip函数


<?php$response = $db->execute("function(greeting, name) { return greeting+', '+name+'!'; }", array("Good bye", "Joe"));echo $response['retval'];?>

以上例程的输出类似于:


Good bye, Joe!

Example #3 作用域实例

如果使用 MongoCode 对象代替字符串作为第一个参数。可以传递一个作用域到将要执行的JavaScript中。


<?php$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'];?>

以上例程的输出类似于:


Goodbye, Joe, says Fred