1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
#include <mongo.h>
#include <string.h>
#include <stdio.h>
bson *
tut_bson (void)
{
bson *b;
b = bson_build_full
(BSON_TYPE_STRING, "author", FALSE, "Gergely Nagy", -1,
BSON_TYPE_ARRAY, "pages", TRUE,
bson_build_full (BSON_TYPE_DOCUMENT, "1", TRUE,
bson_build (BSON_TYPE_STRING, "title", "BSON tutorial", -1,
BSON_TYPE_STRING, "content", "...", -1,
BSON_TYPE_INT32, "importance", 1,
BSON_TYPE_NONE),
BSON_TYPE_DOCUMENT, "2", TRUE,
bson_build (BSON_TYPE_STRING, "title", "Some other thing", -1,
BSON_TYPE_STRING, "content", "...", -1,
BSON_TYPE_INT32, "importance", 0,
BSON_TYPE_NONE),
BSON_TYPE_NONE),
BSON_TYPE_BOOLEAN, "inline", FALSE, TRUE,
BSON_TYPE_NONE);
bson_finish (b);
return b;
}
int
main (void)
{
bson *doc;
bson_cursor *c, *c_arr, *c_page;
bson *v_doc, *v_array;
gboolean v_bool;
const gchar *v_str;
doc = tut_bson ();
c = bson_find (doc, "author");
bson_cursor_get_string (c, &v_str);
printf ("Author: %s\n", v_str);
bson_cursor_next (c);
bson_cursor_next (c);
bson_cursor_get_boolean (c, &v_bool);
printf ("inline: %s\n", (v_bool) ? "TRUE" : "FALSE");
bson_cursor_free (c);
c = bson_find (doc, "author");
bson_cursor_get_string (c, &v_str);
bson_cursor_free (c);
c = bson_find (doc, "inline");
bson_cursor_get_boolean (c, &v_bool);
bson_cursor_free (c);
printf ("Author: %s; inline: %s; (bson_find)\n",
v_str, (v_bool) ? "TRUE" : "FALSE");
c = bson_find (doc, "author");
bson_cursor_get_string (c, &v_str);
while (bson_cursor_next (c))
{
if (strcmp (bson_cursor_key (c), "inline") == 0)
{
bson_cursor_get_boolean (c, &v_bool);
break;
}
}
bson_cursor_free (c);
printf ("Author: %s; inline: %s; (bson_cursor_next)\n",
v_str, (v_bool) ? "TRUE" : "FALSE");
c = bson_find (doc, "author");
bson_cursor_get_string (c, &v_str);
bson_cursor_find_next (c, "inline");
bson_cursor_get_boolean (c, &v_bool);
bson_cursor_free (c);
printf ("Author: %s; inline: %s; (bson_cursor_find_next)\n",
v_str, (v_bool) ? "TRUE" : "FALSE");
c = bson_find (doc, "pages");
bson_cursor_find (c, "inline");
bson_cursor_get_boolean (c, &v_bool);
bson_cursor_find (c, "author");
bson_cursor_get_string (c, &v_str);
bson_cursor_free (c);
printf ("Author: %s; inline: %s; (bson_cursor_find)\n",
v_str, (v_bool) ? "TRUE" : "FALSE");
c = bson_cursor_new (doc);
while (bson_cursor_next (c))
{
printf ("Key: %s; type=%s\n", bson_cursor_key (c),
bson_cursor_type_as_string (c));
}
bson_cursor_free (c);
c = bson_find (doc, "pages");
bson_cursor_get_array (c, &v_array);
c_arr = bson_find (v_array, "2");
bson_cursor_get_document (c_arr, &v_doc);
c_page = bson_find (v_doc, "title");
bson_cursor_get_string (c_page, &v_str);
bson_cursor_free (c_page);
bson_cursor_free (c_arr);
bson_cursor_free (c);
printf ("Title of the 2nd page in the pages array: %s\n", v_str);
bson_free (doc);
return 0;
}
|