c - 在迭代 bson 时访问 value.type
c - accessing value.type when iterating bson
我正在尝试遵循 libbson API 文档。但我好像弄错了什么。 documentation 声明您可以执行以下操作:
const bson_value_t *value;
value = bson_iter_value (&iter);
if (value.type == BSON_TYPE_INT32) {
printf ("%d\n", value.value.v_int32);
}
但是当我尝试用它编译实际代码时,出现以下错误:
example1.c:34:64: error: request for member ‘type’ in something not a structure or union
这里是实际代码:
#include <bson.h>
#include <mongoc.h>
#include <stdio.h>
int
main (int argc,
char *argv[])
{
mongoc_client_t *client;
mongoc_collection_t *collection;
mongoc_cursor_t *cursor;
const bson_t *doc;
const bson_value_t *value;
bson_t *query;
char *str;
bson_iter_t iter;
bson_type_t type;
mongoc_init ();
client = mongoc_client_new ("mongodb://localhost:27017/");
collection = mongoc_client_get_collection (client, "test", "test");
query = bson_new ();
cursor = mongoc_collection_find (collection, MONGOC_QUERY_NONE, 0, 0, 0, query, NULL, NULL);
while (mongoc_cursor_next (cursor, &doc)) {
str = bson_as_json (doc, NULL);
if (bson_iter_init (&iter, doc)) {
while (bson_iter_next (&iter)) {
printf ("Found element key: \"%s\"\n", bson_iter_key (&iter));
type = bson_iter_type (&iter);
printf("type %d\n", (int)type);
value = bson_iter_value (&iter);
printf("Found values of type %d", value.type);
}
}
bson_free(str);
}
bson_destroy (query);
mongoc_cursor_destroy (cursor);
mongoc_collection_destroy (collection);
mongoc_client_destroy (client);
return 0;
}
value
是一个指针。您需要取消引用它:
value->type
或
(*value).type
除此之外,根据the documentation,bson_value_t
没有叫type
的成员。也许他们的意思是
value->value_type
我正在尝试遵循 libbson API 文档。但我好像弄错了什么。 documentation 声明您可以执行以下操作:
const bson_value_t *value;
value = bson_iter_value (&iter);
if (value.type == BSON_TYPE_INT32) {
printf ("%d\n", value.value.v_int32);
}
但是当我尝试用它编译实际代码时,出现以下错误:
example1.c:34:64: error: request for member ‘type’ in something not a structure or union
这里是实际代码:
#include <bson.h>
#include <mongoc.h>
#include <stdio.h>
int
main (int argc,
char *argv[])
{
mongoc_client_t *client;
mongoc_collection_t *collection;
mongoc_cursor_t *cursor;
const bson_t *doc;
const bson_value_t *value;
bson_t *query;
char *str;
bson_iter_t iter;
bson_type_t type;
mongoc_init ();
client = mongoc_client_new ("mongodb://localhost:27017/");
collection = mongoc_client_get_collection (client, "test", "test");
query = bson_new ();
cursor = mongoc_collection_find (collection, MONGOC_QUERY_NONE, 0, 0, 0, query, NULL, NULL);
while (mongoc_cursor_next (cursor, &doc)) {
str = bson_as_json (doc, NULL);
if (bson_iter_init (&iter, doc)) {
while (bson_iter_next (&iter)) {
printf ("Found element key: \"%s\"\n", bson_iter_key (&iter));
type = bson_iter_type (&iter);
printf("type %d\n", (int)type);
value = bson_iter_value (&iter);
printf("Found values of type %d", value.type);
}
}
bson_free(str);
}
bson_destroy (query);
mongoc_cursor_destroy (cursor);
mongoc_collection_destroy (collection);
mongoc_client_destroy (client);
return 0;
}
value
是一个指针。您需要取消引用它:
value->type
或
(*value).type
除此之外,根据the documentation,bson_value_t
没有叫type
的成员。也许他们的意思是
value->value_type