0

保存された JavaScript を使用して、MongoDB にクエリを保存しようとしています。

現在、次のようになっています。

$collection = $db->$app_id;

$query = $collection->find( $filterQuery );

$db->system->js->save(array(
    "_id" => "qo8qu0",
    "value" => new MongoCode("function() { return array($query) }")
));

それから私はそれを実行します:

echo "<pre>";
print_r($test = $db->execute("qo8qu0()"));
echo "</pre>";

ただし、次のエラーが発生します。 Catchable fatal error: Object of class MongoCursor could not be converted to string in /var/www/dev/classes/EmailMessaging.php on line 91

91行目はこの行です(上記のように)、 "value" => new MongoCode("function() { return array($filterQuery) }")

count( $filterQuery );代わりに使用するfind( $filterQuery ); と、動作し、正しい数値が返されます。

使用時に配列を返すようにするにはどうすればよいfindですか?

ありがとうございました

4

1 に答える 1

0

これは、コードの評価によるものです。これを評価しています:

$query = $collection->find( $filterQuery );

つまり、$queryそのMongoCursorクラスを文字列に連結しようとしています。

new MongoCode("function() { return array($query) }")

次のように、すべてを eval 内で行う必要があります。

return $this->execute('function(){ return db.collection.find(filter); }',  array('filter'=>array('_id'=>1)));

countint文字列に追加できる を返すため、機能します。

編集

あちらへ:

$db->system->js->save(array(
    "_id" => "qo8qu0",
    "value" => new MongoCode("function() { return db.collection.find(filter).toArray() }")
));

そして、あなたのアプリで:

$test = $db->execute("qo8qu0()", array('filter'=>array('_id'=>1)))
于 2013-07-28T00:41:02.783 に答える