Provided by: libmongoc-doc_1.27.5-1_all bug

SYNOPSIS

          mongoc_cursor_t *
          mongoc_collection_find_with_opts (mongoc_collection_t *collection,
                                            const bson_t *filter,
                                            const bson_t *opts,
                                            const mongoc_read_prefs_t *read_prefs)
             BSON_GNUC_WARN_UNUSED_RESULT;

PARAMETERS

collection: A mongoc_collection_t.

       • filter: A bson_t containing the query to execute.

       • opts: A bson_t query options, including sort order and which fields to return. Can be NULL.

       • read_prefs: A mongoc_read_prefs_t or NULL.

DESCRIPTION

       Query on collection, passing arbitrary query options to the server in opts.

       To  target  a  specific  server, include an integer "serverId" field in opts with an id obtained first by
       calling mongoc_client_select_server(), then mongoc_server_description_id() on its return value.

       Read preferences, read concern, and collation can be overridden by various  sources.  In  a  transaction,
       read  concern  and  write concern are prohibited in opts and the read preference must be primary or NULL.
       The highest-priority sources for these options are listed first in the following table. No write  concern
       is applied.
                                   ┌──────────────────┬──────────────┬───────────┐
                                   │ Read Preferences │ Read Concern │ Collation │
                                   ├──────────────────┼──────────────┼───────────┤
                                   │ read_prefsoptsopts      │
                                   ├──────────────────┼──────────────┼───────────┤
                                   │ Transaction      │ Transaction  │           │
                                   ├──────────────────┼──────────────┼───────────┤
                                   │ collection       │              │           │
                                   └──────────────────┴──────────────┴───────────┘

       See the example for transactions and for the "distinct" command with opts.

       This  function is considered a retryable read operation.  Upon a transient error (a network error, errors
       due to replica set failover, etc.) the operation is safely retried once.  If retryreads is false  in  the
       URI (see mongoc_uri_t) the retry behavior does not apply.

RETURNS

       This function returns a newly allocated mongoc_cursor_t that should be freed with mongoc_cursor_destroy()
       when  no  longer  in  use.  The returned mongoc_cursor_t is never NULL, even on error. The user must call
       mongoc_cursor_next() on the returned mongoc_cursor_t to execute the initial command.

       Cursor errors can be checked with mongoc_cursor_error_document(). It always fills out the bson_error_t if
       an error occurred, and optionally includes a server reply document if the error occurred server-side.

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

EXAMPLES

       Print First Ten Documents in a Collection

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

          static void
          print_ten_documents (mongoc_collection_t *collection)
          {
             bson_t *filter;
             bson_t *opts;
             mongoc_cursor_t *cursor;
             bson_error_t error;
             const bson_t *doc;
             char *str;

             /* filter by "foo": 1, order by "bar" descending */
             filter = BCON_NEW ("foo", BCON_INT32 (1));
             opts = BCON_NEW (
                "limit", BCON_INT64 (10), "sort", "{", "bar", BCON_INT32 (-1), "}");

             cursor = mongoc_collection_find_with_opts (collection, filter, opts, NULL);

             while (mongoc_cursor_next (cursor, &doc)) {
                str = bson_as_canonical_extended_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 (filter);
             bson_destroy (opts);
          }

       More examples of modifying the query with opts:

          bson_t *filter;
          bson_t *opts;
          mongoc_read_prefs_t *read_prefs;

          filter = BCON_NEW ("foo", BCON_INT32 (1));

          /* Include "field_name_one" and "field_name_two" in "projection", omit
           * others. "_id" must be specifically removed or it is included by default.
           */
          opts = BCON_NEW ("projection", "{",
                              "field_name_one", BCON_BOOL (true),
                              "field_name_two", BCON_BOOL (true),
                              "_id", BCON_BOOL (false),
                           "}",
                           "tailable", BCON_BOOL (true),
                           "awaitData", BCON_BOOL (true),
                           "sort", "{", "bar", BCON_INT32 (-1), "}",
                           "collation", "{",
                              "locale", BCON_UTF8("en_US"),
                              "caseFirst", BCON_UTF8 ("lower"),
                           "}");

          read_prefs = mongoc_read_prefs_new (MONGOC_READ_SECONDARY);

          cursor =
             mongoc_collection_find_with_opts (collection, filter, opts, read_prefs);

       The following options are supported.
                 ┌─────────────────────┬────────────────────┬─────────────────┬────────────────────┐
                 │ Option              │ BSON type          │ Option          │ BSON type          │
                 ├─────────────────────┼────────────────────┼─────────────────┼────────────────────┤
                 │ projection          │ document           │ max             │ document           │
                 ├─────────────────────┼────────────────────┼─────────────────┼────────────────────┤
                 │ sort                │ document           │ maxTimeMS       │ non-negative int64 │
                 ├─────────────────────┼────────────────────┼─────────────────┼────────────────────┤
                 │ skip                │ non-negative int64 │ maxAwaitTimeMS  │ non-negative int64 │
                 ├─────────────────────┼────────────────────┼─────────────────┼────────────────────┤
                 │ limit               │ non-negative int64 │ min             │ document           │
                 ├─────────────────────┼────────────────────┼─────────────────┼────────────────────┤
                 │ batchSize           │ non-negative int64 │ noCursorTimeout │ bool               │
                 ├─────────────────────┼────────────────────┼─────────────────┼────────────────────┤
                 │ exhaust             │ bool               │ oplogReplay     │ bool               │
                 ├─────────────────────┼────────────────────┼─────────────────┼────────────────────┤
                 │ hint                │ string or document │ readConcern     │ document           │
                 ├─────────────────────┼────────────────────┼─────────────────┼────────────────────┤
                 │ allowPartialResults │ bool               │ returnKey       │ bool               │
                 ├─────────────────────┼────────────────────┼─────────────────┼────────────────────┤
                 │ awaitData           │ bool               │ sessionId       │ (none)             │
                 ├─────────────────────┼────────────────────┼─────────────────┼────────────────────┤
                 │ collation           │ document           │ showRecordId    │ bool               │
                 ├─────────────────────┼────────────────────┼─────────────────┼────────────────────┤
                 │ comment             │ any                │ singleBatch     │ bool               │
                 ├─────────────────────┼────────────────────┼─────────────────┼────────────────────┤
                 │ allowDiskUse        │ bool               │ let             │ document           │
                 └─────────────────────┴────────────────────┴─────────────────┴────────────────────┘

       All options are documented in the reference page for the "find" command in  the  MongoDB  server  manual,
       except for "maxAwaitTimeMS", "sessionId", and "exhaust".

       "maxAwaitTimeMS"  is  the  maximum  amount  of  time for the server to wait on new documents to satisfy a
       query, if "tailable" and "awaitData" are both true.  If no new documents are found, the  tailable  cursor
       receives an empty batch. The "maxAwaitTimeMS" option is ignored for MongoDB older than 3.4.

       To  add  a  "sessionId",  construct a mongoc_client_session_t with mongoc_client_start_session(). You can
       begin   a    transaction    with    mongoc_client_session_start_transaction(),    optionally    with    a
       mongoc_transaction_opt_t   that   overrides   the   options   inherited   from   collection.   Then   use
       mongoc_client_session_append()   to   add   the   session   to   opts.   See   the   example   code   for
       mongoc_client_session_t.

       To add a "readConcern", construct a mongoc_read_concern_t with mongoc_read_concern_new() and configure it
       with  mongoc_read_concern_set_level().  Then  use mongoc_read_concern_append() to add the read concern to
       opts.

       "exhaust" requests the construction of an exhaust cursor.

       For some options like "collation", the driver returns an error if  the  server  version  is  too  old  to
       support the feature.  Any fields in opts that are not listed here are passed to the server unmodified.

       allowDiskUse is only supported in MongoDB 4.4+.

       comment only supports string values prior to MongoDB 4.4.

DEPRECATED OPTIONS

       The  snapshot  boolean  option  is  removed  in MongoDB 4.0. The maxScan option, a non-negative int64, is
       deprecated in MongoDB 4.0 and will be removed in a future MongoDB version. The oplogReplay boolean option
       is deprecated in MongoDB 4.4. All of these options are supported by  the  C  Driver  with  older  MongoDB
       versions.

       SEE ALSO:
          The "find" command in the MongoDB Manual. All options listed there are supported by the C Driver.  For MongoDB servers before 3.2, the driver transparently converts the query to a legacy OP_QUERY message.

THE EXPLAIN COMMAND

       With  MongoDB  before  3.2,  a query with option $explain: true returns information about the query plan,
       instead of the query results. Beginning in MongoDB 3.2, there is a separate "explain" command. The driver
       will not convert  "$explain"  queries  to  "explain"  commands,  you  must  call  the  "explain"  command
       explicitly:

          /* MongoDB 3.2+, "explain" command syntax */
          command = BCON_NEW ("explain", "{",
                              "find", BCON_UTF8 ("collection_name"),
                              "filter", "{", "foo", BCON_INT32 (1), "}",
                              "}");

          mongoc_collection_command_simple (collection, command, NULL, &reply, &error);

       SEE ALSO:
          The "explain" command in the MongoDB Manual.

AUTHOR

       MongoDB, Inc

COPYRIGHT

       2017-present, MongoDB, Inc

1.27.5                                            Aug 06, 2024               MONGOC_COLLECTION_FIND_WITH_OPTS(3)