# mongoc_collection_find()

## Synopsis

    mongoc_cursor_t *
    mongoc_collection_find (mongoc_collection_t       *collection,
                            mongoc_query_flags_t       flags,
                            uint32_t                   skip,
                            uint32_t                   limit,
                            uint32_t                   batch_size,
                            const bson_t              *query,
                            const bson_t              *fields,
                            const mongoc_read_prefs_t *read_prefs)
       BSON_GNUC_WARN_UNUSED_RESULT;

## Parameters

collection | A mongoc_collection_t.
flags | A mongoc_query_flags_t.
skip | A uint32_t of number of documents to skip or 0.
limit | A uint32_t of max number of documents to return or 0.
batch_size | A uint32_t containing batch size of document result sets or 0 for default. Default is 100.
query | A bson_t containing the query and options to execute.
fields | A bson_t containing fields to return or NULL.
read_prefs | A mongoc_read_prefs_t or NULL for default read preferences.

## Description

This function shall execute a query on the underlying collection.

If no options are necessary, query can simply contain a query such as {a:1}. If you would like to specify options such as a sort order, the query must be placed inside of {"$query": {}} as specified by the server documentation. See the example below for how to properly specify additional options to query.

## Returns

A newly allocated mongoc_cursor_t that should be freed with mongoc_cursor_destroy() when no longer in use. If invalid parameters are supplied, NULL may be returned.

Failure to handle the result of this function is a programming error.

## Example

### Print All Documents in a Collection

    #include <mongoc.h>
    #include <stdio.h>

    static void
    print_all_documents (mongoc_collection_t *collection)
    {
       mongoc_cursor_t *cursor;
       bson_error_t error;
       const bson_t *doc;
       char *str;
       bson_t *query;

       query = BCON_NEW ("$query", "{", "foo", BCON_INT32 (1), "}",
                         "$orderby": "{", "foo", BCON_INT32 (-1), "}");
       cursor = mongoc_collection_query (collection, MONGOC_QUERY_NONE, 0, 0, 0, query, NULL, NULL);

       while (mongoc_cursor_more (cursor) && mongoc_cursor_next (cursor, &doc)) {
          str = bson_as_json (doc, NULL);
          printf ("%s\n", str);
          bson_free (str);
       }

       if (mongoc_cursor_error (cursor, &error)) {
          fprintf (stderr, "An error occurred: %s\n", error.message);
       }

       mongoc_cursor_destroy (cursor);
       bson_destroy (query);
    }