1MONGOC_COLLECTION_FIND_AND_MODIFY(3)libmongoMcONGOC_COLLECTION_FIND_AND_MODIFY(3)
2
3
4
6 mongoc_collection_find_and_modify - mongoc_collection_find_and_modify()
7
9 bool
10 mongoc_collection_find_and_modify (mongoc_collection_t *collection,
11 const bson_t *query,
12 const bson_t *sort,
13 const bson_t *update,
14 const bson_t *fields,
15 bool _remove,
16 bool upsert,
17 bool _new,
18 bson_t *reply,
19 bson_error_t *error);
20
22 • collection: A mongoc_collection_t.
23
24 • query: A bson_t containing the query to locate target document(s).
25
26 • sort: A bson_t containing the sort order for query.
27
28 • update: A bson_t containing an update spec.
29
30 • fields: An optional bson_t containing the fields to return or NULL.
31
32 • _remove: If the matching documents should be removed.
33
34 • upsert: If an upsert should be performed.
35
36 • _new: If the new version of the document should be returned.
37
38 • reply: Optional pointer to an uninitialized bson_t that will be ini‐
39 tialized with the result.
40
41 • error: An optional location for a bson_error_t or NULL.
42
44 Update and return an object.
45
46 This is a thin wrapper around the findAndModify command. Either update
47 or _remove arguments are required.
48
49 See also: mongoc_collection_find_and_modify_with_opts.
50
51 As of MongoDB 3.2, the mongoc_write_concern_t specified on the mon‐
52 goc_collection_t will be used, if any.
53
54 reply is always initialized, and must be freed with bson_destroy().
55
57 Errors are propagated via the error parameter.
58
60 Returns either the document before or after modification based on the
61 _new parameter.
62
63 A write concern timeout or write concern error is considered a failure.
64
66 find-and-modify.c
67
68 #include <mongoc/mongoc.h>
69 #include <stdio.h>
70
71
72 int
73 main (int argc, char *argv[])
74 {
75 mongoc_collection_t *collection;
76 mongoc_client_t *client;
77 const char *uri_string =
78 "mongodb://127.0.0.1:27017/?appname=find-and-modify-example";
79 mongoc_uri_t *uri;
80 bson_error_t error;
81 bson_t *query;
82 bson_t *update;
83 bson_t reply;
84 char *str;
85
86 mongoc_init ();
87
88 uri = mongoc_uri_new_with_error (uri_string, &error);
89 if (!uri) {
90 fprintf (stderr,
91 "failed to parse URI: %s\n"
92 "error message: %s\n",
93 uri_string,
94 error.message);
95 return EXIT_FAILURE;
96 }
97
98 client = mongoc_client_new_from_uri (uri);
99 if (!client) {
100 return EXIT_FAILURE;
101 }
102
103 mongoc_client_set_error_api (client, 2);
104 collection = mongoc_client_get_collection (client, "test", "test");
105
106 /*
107 * Build our query, {"cmpxchg": 1}
108 */
109 query = BCON_NEW ("cmpxchg", BCON_INT32 (1));
110
111 /*
112 * Build our update. {"$set": {"cmpxchg": 2}}
113 */
114 update = BCON_NEW ("$set", "{", "cmpxchg", BCON_INT32 (2), "}");
115
116 /*
117 * Submit the findAndModify.
118 */
119 if (!mongoc_collection_find_and_modify (collection,
120 query,
121 NULL,
122 update,
123 NULL,
124 false,
125 false,
126 true,
127 &reply,
128 &error)) {
129 fprintf (stderr, "find_and_modify() failure: %s\n", error.message);
130 return EXIT_FAILURE;
131 }
132
133 /*
134 * Print the result as JSON.
135 */
136 str = bson_as_canonical_extended_json (&reply, NULL);
137 printf ("%s\n", str);
138 bson_free (str);
139
140 /*
141 * Cleanup.
142 */
143 bson_destroy (query);
144 bson_destroy (update);
145 bson_destroy (&reply);
146 mongoc_collection_destroy (collection);
147 mongoc_uri_destroy (uri);
148 mongoc_client_destroy (client);
149
150 mongoc_cleanup ();
151
152 return EXIT_SUCCESS;
153 }
154
155
157 MongoDB, Inc
158
160 2017-present, MongoDB, Inc
161
162
163
164
1651.17.6 Jun 03, 20M2O1NGOC_COLLECTION_FIND_AND_MODIFY(3)