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
: Abson_t
containing the query to match the document for updating.update
: Abson_t
containing the update to perform.opts
: Abson_t
containing additional options orNULL
.reply
: Optional. An uninitializedbson_t
populated with the update result, orNULL
.error
: An optional location for a bson_error_t orNULL
.
opts
may be NULL or a BSON document with additional command options:
readConcern
: Construct a mongoc_read_concern_t and use mongoc_read_concern_append() to add the read concern toopts
. See the example code for mongoc_client_read_command_with_opts().writeConcern
: Construct a mongoc_write_concern_t and use mongoc_write_concern_append() to add the write concern toopts
. See the example code for mongoc_client_write_command_with_opts().sessionId
: Construct a mongoc_client_session_t with mongoc_client_start_session() and use mongoc_client_session_append() to add the session toopts
. See the example code for mongoc_client_session_t.validate
: Set tofalse
to skip client-side validation of the provided BSON documents.bypassDocumentValidation
: Set totrue
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.serverId
: To target a specific server, include an int32 “serverId” field. Obtain the id by calling mongoc_client_select_server(), then mongoc_server_description_id() on its return value.arrayFilters
An array of filters specifying to which array elements an update should apply.upsert
Aboolean
, when true, creates a new document if no document matches the query.
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 “modifiedCount” and “matchedCount”. If a document was upserted, reply
contains an “upsertedId” field. 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()
.
See Also¶
MongoDB update command documentation for more information on the update options.
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.
If provided, reply
will be initialized and populated with the fields matchedCount
, modifiedCount
, and optionally upsertedId
if applicable.
Example¶
#include "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 err = {0};
mongoc_cursor_t *cursor;
mongoc_client_t *client =
mongoc_client_new ("mongodb://localhost:27017/?appname=example-update");
mongoc_collection_t *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, &err)) {
fprintf (stderr, "insert failed: %s\n", err.message);
return EXIT_FAILURE;
}
if (!mongoc_collection_update_one (
coll, selector, update, NULL, NULL, &err)) {
fprintf (stderr, "update failed %s\n", err.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_client_destroy (client);
return EXIT_SUCCESS;
}