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;
}
|