# The MongoCommandCursor class

(PECL mongo >=1.5.0)

## Introduction

A command cursor is similar to a MongoCursor except that you use it for iterating through the results of a database command instead of a normal query. Command cursors are useful for iterating over large result sets that might exceed the document size limit (currently 16MB) of a single MongoDB::command() response.

While you can create command cursors using MongoCommandCursor::__construct() or the MongoCommandCursor::createFromDocument() factory method, you will generally want to use command-specific helpers such as MongoCollection::aggregateCursor().

Note that the cursor does not "contain" the database command's results; it just manages iteration through them. Thus, if you print a cursor (f.e. with var_dump() or print_r()), you will see the cursor object but not the result documents.

## Cursor Stages

A MongoCommandCursor has two "life stages": pre- and post- command. When a cursor is created, it has not yet contacted the database, so it is in its pre-command state. When the client first attempts to get a result (by calling MongoCommandCursor::rewind(), directly or indirectly), the cursor moves into the post-command state.

The command cursor's batch size and socket timeout may be configured in both the pre- and post- command states.

Example #1 Adding options to MongoCommandCursor

`<?php
$cursor = new MongoCommandCursor(...);
$cursor = $cursor->batchSize( 4 );
foreach ($cursor as $result) {
var_dump($result);
}
?>`

## Class synopsis

MongoCommandCursor implements MongoCursorInterface , Iterator {
/* Methods */
public batchSize ( int `$batchSize` ) : MongoCommandCursor
public __construct ( MongoClient `$connection` , string `$ns` , array `$command` = array() )
public static createFromDocument ( MongoClient `$connection` , string `$hash` , array `$document` ) : MongoCommandCursor
public current ( ) : array
public dead ( ) : bool
public getReadPreference ( ) : array
public info ( ) : array
public key ( ) : int
public next ( ) : void
public rewind ( ) : array
public setReadPreference ( string `$read_preference` [, array `$tags` ] ) : MongoCommandCursor
public timeout ( int `$ms` ) : MongoCommandCursor
public valid ( ) : bool
}

## See Also

- MongoDB::command()
- MongoCollection::aggregateCursor()

## Table of Contents

- MongoCommandCursor::batchSize — Limits the number of elements returned in one batch
- MongoCommandCursor::__construct — Create a new command cursor
- MongoCommandCursor::createFromDocument — Create a new command cursor from an existing command response document
- MongoCommandCursor::current — Returns the current element
- MongoCommandCursor::dead — Checks if there are results that have not yet been sent from the database
- MongoCommandCursor::getReadPreference — Get the read preference for this command
- MongoCommandCursor::info — Gets information about the cursor's creation and iteration
- MongoCommandCursor::key — Returns the current result's index within the result set
- MongoCommandCursor::next — Advances the cursor to the next result
- MongoCommandCursor::rewind — Executes the command and resets the cursor to the start of the result set
- MongoCommandCursor::setReadPreference — Set the read preference for this command
- MongoCommandCursor::timeout — Sets a client-side timeout for this command
- MongoCommandCursor::valid — Checks if the cursor is reading a valid result