This is an advanced function and should not be used unless you know what you're doing.
A query can optionally be nested in a "query" field if other options, such as a sort or hint, are given. For instance, adding a sort causes the query to become a subfield of a bigger query object, like:
1 2 3 4 5 | <?php $query = array ( "query" => $query , "orderby" => $sort ); ?> |
This method is for adding a top-level field to a query. It makes the query a subobject (if it isn't already) and adds the key/value pair of your chosing to the top level.
Fieldname to add.
Value to add.
Returns this cursor.
It cannot be used to add extra criteria to a query on the fly. For instance, this will not work:
1 2 3 4 5 6 | <?php // NOT CORRECT $cursor = $users ->find()->addOption( "name" , "joe" )->addOption( "age" , 20); ?> |
does not
Throws MongoCursorException if this cursor has started iterating.
MongoDB supports special options to be send to the server. The shell uses the _addSpecial option to send a $comment to the server. This comment will show up in the profiling log (for slow queries f.e.). In the PHP driver, you use the MongoCursor::addOption() method.
1 2 3 4 5 6 7 8 | <?php $m = new MongoClient; $c = $m ->demo->demo; $cursor = $c ->find(); $cursor ->addOption( '$comment' , "This comment will show up in the profiling log" ); foreach ( $cursor as $document ) { /* empty */ } ?> |
The above example will output something similar to:
{ "op" : "query", "ns" : "demo.demo", "query" : { "$query" : { }, "$comment" : "This comment will show up in the profiling log" }, "cursorid" : 168463566447, "ntoreturn" : 0, "ntoskip" : 0, "nscanned" : 101, "nscannedObjects" : 101, "keyUpdates" : 0, "numYield" : 0, …
Using MongoCursor::skip() to skip over millions of results can become slow. One way around this is to use $min or $max options for the query. These can be handy, but they require an index on exactly the fields being searched for. This is an example of how to use $min as an alternative to MongoCursor::skip().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php // make sure we have an index $c ->ensureIndex( array ( "ts" => 1)); // you may have to modify this to run in a reasonable amount of time on slow // machines (should take about 30 seconds on a good machine) for ( $i = 0; $i < 30000000; $i ++) { $c ->insert( array ( "ts" => new MongoDate(), "i" => $i )); } $now = strtotime ( "now" ); // find documents inserted in the last 2 seconds $cursor = $c ->find()->addOption( '$min' , array ( "ts" => $now -2)); ?> |
Please login to continue.