(PECL mongo >=1.0.4)
MongoCursor::addOption — トップレベルの キー/値 のペアをクエリに追加する
これは高度な関数なので、今何をしているのかをわかっている人以外は使ってはいけません。
ソートやヒントなどの他のオプションを指定する場合は、クエリを "query" フィールドに書くこともできます。 たとえばソートを追加した場合は、 クエリは次のようにサブフィールドのひとつとなります。
<?php
$query = array("query" => $query, "orderby" => $sort);
?>
このメソッドは、トップレベルのフィールドをクエリに追加します。 クエリにサブオブジェクトを作成 (まだ存在しない場合) し、 指定した キー/値 のペアをトップレベルに追加します。
クエリにその場で条件を追加するという目的で使うことはできません。たとえば、 これは正しく動作しません。
<?php
// 間違った使いかた
$cursor = $users->find()->addOption("name", "joe")->addOption("age", 20);
?>
key
追加したいフィールド名。
value
追加したい値。
このカーソルを返します。
カーソルの反復処理が始まっている場合は MongoCursorException をスローします。
例1 MongoCursor::addOption() の例
MongoCursor::skip() を使って何百万件もの結果をスキップすると、 処理速度が低下します。これを回避する方法のひとつが、クエリのオプション $min あるいは $max を使うことです。 これらは便利ですが、検索するフィールドにインデックスがなければなりません。 この例は、$min を MongoCursor::skip() の代替として使う方法を示します。
<?php
// インデックスがなければなりません
$c->ensureIndex(array("ts" => 1));
// マシンの性能によって、この値を適宜変更しなければならないかもしれません
// (性能の良いマシンで 30 秒ほどかかります)
for ($i = 0; $i < 30000000; $i++) {
$c->insert(array("ts" => new MongoDate(), "i" => $i));
}
$now = strtotime("now");
// 最後の 2 秒で追加されたドキュメントを探します
$cursor = $c->find()->addOption('$min', array("ts" => $now-2));
?>