c - 迭代bson时访问value.type

时间:2015-02-17 08:23:21

标签: c mongodb struct bson mongo-c-driver

我正在尝试遵循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;
}

1 个答案:

答案 0 :(得分:3)

value是一个指针。你需要取消引用它:

value->type

(*value).type

除此之外,根据the documentationbson_value_t没有名为type的成员。也许他们的意思是

value->value_type