Skip to content

Commit c8e4763

Browse files
committed
add example use
1 parent 2e479db commit c8e4763

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

src/libmongoc/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -1230,6 +1230,7 @@ if (ENABLE_EXAMPLES AND ENABLE_SHARED)
12301230
mongoc_add_example (mongoc-ping ${PROJECT_SOURCE_DIR}/examples/mongoc-ping.c)
12311231
mongoc_add_example (mongoc-tail ${PROJECT_SOURCE_DIR}/examples/mongoc-tail.c)
12321232
mongoc_add_example (example-collection-command ${PROJECT_SOURCE_DIR}/examples/example-collection-command.c)
1233+
mongoc_add_example (example-bulkwrite ${PROJECT_SOURCE_DIR}/examples/example-bulkwrite.c)
12331234

12341235
# examples/aggregation/
12351236
mongoc_add_example (aggregation1 ${PROJECT_SOURCE_DIR}/examples/aggregation/aggregation1.c)
+87
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
// example-bulkwrite shows use of `mongoc_client_bulkwrite`.
2+
3+
#include <mongoc/mongoc.h>
4+
5+
#define HANDLE_ERROR(...) \
6+
if (1) { \
7+
fprintf (stderr, __VA_ARGS__); \
8+
fprintf (stderr, "\n"); \
9+
goto fail; \
10+
} else \
11+
(void) 0
12+
13+
int
14+
main (int argc, char *argv[])
15+
{
16+
bool ok = false;
17+
18+
mongoc_init ();
19+
20+
bson_error_t error;
21+
mongoc_client_t *client = mongoc_client_new ("mongodb://localhost:27017");
22+
mongoc_bulkwriteopts_t *bwo = mongoc_bulkwriteopts_new ();
23+
mongoc_bulkwriteopts_set_verboseresults (bwo, true);
24+
mongoc_bulkwrite_t *bw = mongoc_client_bulkwrite_new (client);
25+
26+
// Insert a document to `db.coll1`
27+
{
28+
bson_t *doc = BCON_NEW ("foo", "bar");
29+
if (!mongoc_bulkwrite_append_insertone (bw, "db.coll1", doc, NULL, &error)) {
30+
HANDLE_ERROR ("Error appending insert one: %s", error.message);
31+
}
32+
bson_destroy (doc);
33+
}
34+
// Insert a document to `db.coll2`
35+
{
36+
bson_t *doc = BCON_NEW ("foo", "baz");
37+
if (!mongoc_bulkwrite_append_insertone (bw, "db.coll2", doc, NULL, &error)) {
38+
HANDLE_ERROR ("Error appending insert one: %s", error.message);
39+
}
40+
bson_destroy (doc);
41+
}
42+
43+
mongoc_bulkwritereturn_t bwr = mongoc_bulkwrite_execute (bw, bwo);
44+
45+
// Print results.
46+
{
47+
BSON_ASSERT (bwr.res); // Has results. NULL only returned for unacknowledged writes.
48+
printf ("Insert count : %" PRId64 "\n", mongoc_bulkwriteresult_insertedcount (bwr.res));
49+
const bson_t *ir = mongoc_bulkwriteresult_insertresults (bwr.res);
50+
BSON_ASSERT (ir); // Has verbose results. NULL only returned if verbose results not requested.
51+
char *ir_str = bson_as_relaxed_extended_json (ir, NULL);
52+
printf ("Insert results : %s\n", ir_str);
53+
bson_free (ir_str);
54+
}
55+
56+
// Print all error information. To observe: try setting the `_id` fields to cause a duplicate key error.
57+
if (bwr.exc) {
58+
const char *msg = "(none)";
59+
if (mongoc_bulkwriteexception_error (bwr.exc, &error)) {
60+
msg = error.message;
61+
}
62+
const bson_t *we = mongoc_bulkwriteexception_writeerrors (bwr.exc);
63+
char *we_str = bson_as_relaxed_extended_json (we, NULL);
64+
const bson_t *wce = mongoc_bulkwriteexception_writeconcernerrors (bwr.exc);
65+
char *wce_str = bson_as_relaxed_extended_json (wce, NULL);
66+
const bson_t *er = mongoc_bulkwriteexception_errorreply (bwr.exc);
67+
char *er_str = bson_as_relaxed_extended_json (er, NULL);
68+
printf ("Top-level error : %s\n", msg);
69+
printf ("Write errors : %s\n", we_str);
70+
printf ("Write concern errors : %s\n", wce_str);
71+
printf ("Error reply : %s\n", er_str);
72+
bson_free (er_str);
73+
bson_free (wce_str);
74+
bson_free (we_str);
75+
}
76+
77+
mongoc_bulkwriteresult_destroy (bwr.res);
78+
mongoc_bulkwriteexception_destroy (bwr.exc);
79+
mongoc_bulkwrite_destroy (bw);
80+
81+
ok = true;
82+
fail:
83+
mongoc_client_destroy (client);
84+
mongoc_bulkwriteopts_destroy (bwo);
85+
mongoc_cleanup ();
86+
return ok ? EXIT_SUCCESS : EXIT_FAILURE;
87+
}

0 commit comments

Comments
 (0)