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.

•   comment: A bson_value_t specifying the comment to attach to this command. The comment will appear in log messages, profiler output, and currentOp output. Requires MongoDB 4.4 or later.

•   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.

•   let: A BSON document consisting of any number of parameter names, each followed by definitions of constants in the MQL Aggregate Expression language.

•   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 (void)
{
   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