Overview
In this guide, you can learn how to specify which documents to return from a read operation by using the following operations:
limit: Specifies the maximum number of documents to return from a querysort: Specifies the sort order for the returned documentsskip: Specifies the number of documents to skip before returning query results
Sample Data
The examples in this guide use the restaurants collection in the sample_restaurants
database from the Atlas sample datasets. To learn how to create a
free MongoDB Atlas cluster and load the sample datasets, see the
Get Started with Atlas guide.
Limit
To specify the maximum number of documents returned from a read operation,
pass the limit option to your mongoc_collection_find_with_opts()
function call.
The following example finds all restaurants that have a cuisine field value
of "Italian" and limits the results to 5 documents:
const bson_t *doc; bson_t *filter = BCON_NEW ("cuisine", BCON_UTF8 ("Italian")); bson_t *opts = BCON_NEW ("limit", BCON_INT64 (5)); mongoc_cursor_t *results = mongoc_collection_find_with_opts (collection, filter, opts, NULL); while (mongoc_cursor_next (results, &doc)) { char *str = bson_as_canonical_extended_json (doc, NULL); printf ("%s\n", str); bson_free (str); } bson_destroy (filter); bson_destroy (opts); mongoc_cursor_destroy (results);
{ "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "V & T Restaurant", ... } { "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "Mimis Restaurant & Bar", ... } { "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "Venice Restaurant", ... } { "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "Areo Restaurant", ... } { "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "Tre Giovani Pizza & Pasta", ... }
Tip
The preceding example returns the first five documents returned by the query in natural order. The following section describes how to return the documents in a specified sort order.
Sort
To return documents in a specified order, use the sort option. The sort
option takes a sort direction as a parameter. To specify the sort direction,
pass a 1 for an ascending sort or a -1 for a descending sort.
Ascending sorts order values from lowest to highest, and descending sorts order values from
highest to lowest.
The following example returns all documents with a cuisine field value of
"Italian", sorted by the value of the name field in ascending order:
const bson_t *doc; bson_t *filter = BCON_NEW ("cuisine", BCON_UTF8 ("Italian")); bson_t *opts = BCON_NEW ("sort", "{", "name", BCON_INT32 (1), "}"); mongoc_cursor_t *results = mongoc_collection_find_with_opts (collection, filter, opts, NULL); while (mongoc_cursor_next (results, &doc)) { char *str = bson_as_canonical_extended_json (doc, NULL); printf ("%s\n", str); bson_free (str); } bson_destroy (filter); bson_destroy (opts); mongoc_cursor_destroy (results);
{ "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "(Lewis Drug Store) Locanda Vini E Olii", ... } { "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "101 Restaurant And Bar", ... } { "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "44 Sw Ristorante & Bar", ... } { "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "900 Park", ... } { "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "A Voce", ... } ...
Skip
To skip a specified number of documents before returning your query results,
use the skip option and pass in the number of documents to skip. The
skip option ignores the specified number of documents in your query
results, then returns the rest.
The following example returns all documents that have a cuisine field value
of "Italian" and skips the first 10 documents:
const bson_t *doc; bson_t *filter = BCON_NEW ("cuisine", BCON_UTF8 ("Italian")); bson_t *opts = BCON_NEW ("skip", BCON_INT64 (10)); mongoc_cursor_t *results = mongoc_collection_find_with_opts (collection, filter, opts, NULL); while (mongoc_cursor_next (results, &doc)) { char *str = bson_as_canonical_extended_json (doc, NULL); printf ("%s\n", str); bson_free (str); } bson_destroy (filter); bson_destroy (opts); mongoc_cursor_destroy (results);
{ "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "Trattoria Alba", ... } { "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "Da Umberto Restaurant", ... } { "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "La Strada Restaurant", ... } { "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "Pasta Lovers Trattoria", ... } { "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "Nanni Restaurant", ... } ...
Combine Limit, Sort, and Skip
You can combine the limit, sort, and skip options in a single
operation. This allows you to set a maximum number of sorted documents to
return, skipping a specified number of documents before returning.
The following example returns documents with the cuisine field value of
"Italian". The results are sorted in alphabetical order, skipping the first
10 documents and limiting the results to 5 documents:
const bson_t *doc; bson_t *filter = BCON_NEW ("cuisine", BCON_UTF8 ("Italian")); bson_t *opts = BCON_NEW ("limit", BCON_INT64 (5), "skip", BCON_INT64 (10), "sort", "{", "name", BCON_INT32 (1), "}"); mongoc_cursor_t *results = mongoc_collection_find_with_opts (collection, filter, opts, NULL); while (mongoc_cursor_next (results, &doc)) { char *str = bson_as_canonical_extended_json (doc, NULL); printf ("%s\n", str); bson_free (str); } bson_destroy (filter); bson_destroy (opts); mongoc_cursor_destroy (results);
{ "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "Acqua", ... } { "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "Acqua Restaurant", ... } { "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "Acqua Santa", ... } { "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "Acquista Trattoria", ... } { "_id" : { "$oid" : "..." }, "cuisine" : "Italian", "name" : "Acquolina Catering", ... }
Note
The order in which you call these methods doesn't change the documents that are returned. The driver automatically reorders the calls to perform the sort and skip operations first, and the limit operation afterward.
Additional Information
For more information about specifying a query, see Specify a Query.
For more information about retrieving documents, see Retrieve Data.
API Documentation
To learn more about the mongoc_collection_find_with_opts() function, see the
API documentation.