MONGOC_COLLECTION_UPDATE_ONE(3)

NAME
mongoc_collection_update_one - mongoc_collection_update_one()

SYNOPSIS

        bool
        mongoc_collection_update_one (mongoc_collection_t *collection,
                                      const bson_t *selector,
                                      const bson_t *update,
                                      const bson_t *opts,
                                      bson_t *reply,
                                      bson_error_t *error);

PARAMETERS

    •   collection: A mongoc_collection_t.

    •   selector: A bson_t containing the query to match the document for updating.

    •   update: A bson_t containing the update to perform. If updating with a pipeline, a bson_t array.

    •   reply: Optional. An uninitialized bson_t populated with the update result, or NULL.

    •   error: An optional location for a bson_error_t or NULL.

opts may be NULL or a BSON document with additional command options:

    •   writeConcern: Construct a mongoc_write_concern_t and use mongoc_write_concern_append to add the write concern to opts. See the example code for mongoc_client_write_command_with_opts.

    •   sessionId: First, 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, and use mongoc_client_session_append to add the session to opts. See the example code for mongoc_client_session_t.

    •   validate: Construct a bitwise-or of all desired bson_validate_flags_t. Set to false to skip client-side validation of the provided BSON documents.

    •   bypassDocumentValidation: Set to true to skip server-side schema validation of the provided BSON documents.

    •   collation: Configure textual comparisons. See Setting Collation Order, and the MongoDB Manual entry on Collation. Collation requires MongoDB 3.2 or later, otherwise an error is returned.

    •   hint: A document or string that specifies the index to use to support the query predicate.

    •   upsert: When true, creates a new document if no document matches the query.

    •   arrayFilters: An array of filters specifying to which array elements an update should apply.

DESCRIPTION

This function updates at most one document in collection that matches selector.

To update multiple documents see mongoc_collection_update_many.

If you pass a non-NULL reply, it is filled out with fields matchedCount, modifiedCount, and optionally upsertedId if applicable. If there is a server error then reply contains either a "writeErrors" array with one subdocument or a "writeConcernErrors" array. The reply must be freed with bson_destroy().

ERRORS

Errors are propagated via the error parameter.

RETURNS

Returns true if successful. Returns false and sets error if there are invalid arguments or a server or network error.

A write concern timeout or write concern error is considered a failure.

EXAMPLE

example-update.c

        #include "mongoc/mongoc.h"

        int
        main (int argc, char **argv)
        {
           bson_t *to_insert = BCON_NEW ("_id", BCON_INT32 (1));
           bson_t *selector = BCON_NEW ("_id", "{", "$gt", BCON_INT32 (0), "}");
           bson_t *update = BCON_NEW ("$set", "{", "x", BCON_INT32 (1), "}");
           const bson_t *next_doc;
           char *to_str;
           bson_error_t error = {0};
           mongoc_cursor_t *cursor;
           mongoc_client_t *client;
           mongoc_collection_t *coll;
           const char *uri_string = "mongodb://localhost:27017/?appname=example-update";
           mongoc_uri_t *uri = mongoc_uri_new_with_error (uri_string, &error);

           if (!uri) {
              fprintf (stderr,
                       "failed to parse URI: %s\n"
                       "error message:       %s\n",
                       uri_string,
                       error.message);
              return EXIT_FAILURE;
           }

           client = mongoc_client_new_from_uri (uri);
           if (!client) {
              return EXIT_FAILURE;
           }

           coll = mongoc_client_get_collection (client, "db", "example_coll");

           mongoc_client_set_error_api (client, 2);
           /* insert a document */
           if (!mongoc_collection_insert_one (coll, to_insert, NULL, NULL, &error)) {
              fprintf (stderr, "insert failed: %s\n", error.message);
              return EXIT_FAILURE;
           }

           if (!mongoc_collection_update_one (
                  coll, selector, update, NULL, NULL, &error)) {
              fprintf (stderr, "update failed: %s\n", error.message);
              return EXIT_FAILURE;
           }

           to_str = bson_as_relaxed_extended_json (to_insert, NULL);
           printf ("inserted: %s\n", to_str);
           bson_free (to_str);

           cursor = mongoc_collection_find_with_opts (coll, selector, NULL, NULL);
           BSON_ASSERT (mongoc_cursor_next (cursor, &next_doc));
           printf ("after update, collection has the following document:\n");

           to_str = bson_as_relaxed_extended_json (next_doc, NULL);
           printf ("%s\n", to_str);
           bson_free (to_str);

           BSON_ASSERT (mongoc_collection_drop (coll, NULL));

           bson_destroy (to_insert);
           bson_destroy (update);
           bson_destroy (selector);
           mongoc_collection_destroy (coll);
           mongoc_uri_destroy (uri);
           mongoc_client_destroy (client);

           return EXIT_SUCCESS;
        }

SEE ALSO:
        MongoDB update command documentation for more information on the update options.

        mongoc_collection_update_many

        mongoc_collection_replace_one

AUTHOR
MongoDB, Inc

COPYRIGHT
2017-present, MongoDB, Inc