(PECL mongo >=0.9.3)
MongoDB::execute — JavaScript コードをデータベースサーバ上で実行する
Mongo データベースサーバは JavaScript エンジンを持っています。 このメソッドを使うと、任意の JavaScript をデータベース上で実行することができます。 大量のコレクションの操作を軽量に行ったり、 結果に対する何らかの処理をデータベース側で行うことでクライアント側への送信量を減らしたり といった際に有用です。
データベース内での JavaScript の実行時には書き込みロックを取得します。 つまり、他の操作をブロックするということです。長いスクリプトを実行する前にはこのことを考慮しましょう。
これは、データベースコマンドのラッパーで、次のコードと同じ意味です。
<?php
public function execute($code, $args) {
return $this->command(array('$eval' => $code, args => $args));
}
?>
評価した結果を返します。
例1 単純な MongoDB::execute() の例
<?php
$response = $db->execute("function() { return 'Hello, world!'; }");
echo $response['retval'];
?>
上の例の出力は、 たとえば以下のようになります。
例2 パラメータつきの MongoDB::execute() の例
オプションのパラメータ配列を JavaScript の関数に渡します。
<?php
$response = $db->execute("function(greeting, name) { return greeting+', '+name+'!'; }", array("Good bye", "Joe"));
echo $response['retval'];
?>
上の例の出力は、 たとえば以下のようになります。
例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'];
?>
上の例の出力は、 たとえば以下のようになります。