gpt4 book ai didi

无法在 BSON 对象中找到数组的键

转载 作者:行者123 更新时间:2023-11-30 16:53:01 26 4
gpt4 key购买 nike

我正在编写一个 C 函数来读取 bson 编码文件。我正在尝试找到数组的 key 。我知道 key 存在,因为 bsondump 会打印它并输出数组。当我搜索 "vol" 时,bson_iter_find() 返回 false。

这是函数:

static int nas_initalize(const char *path)
{
int error = 0;
bson_reader_t *reader = bson_reader_new_from_file(path, &bson_error);
if (!reader) {
fprintf (stderr, "ERROR: %d.%d: %s\n",
bson_error.domain, bson_error.code, bson_error.message);
}
super_block = bson_reader_read(reader, NULL);
bson_iter_init(&iter, super_block);

if (bson_iter_find(&iter, "max_dir"))
{
max_dir = bson_iter_int32(&iter);
}
else
{
error = -1;
bson_reader_destroy(reader);
}

if (bson_iter_find(&iter, "raid_lv"))
{
raid_lv = bson_iter_int32(&iter);
}
else
{
error = -1;
bson_reader_destroy(reader);
}

if(bson_iter_find(&iter, "vol"))
{
int count = 0;
bson_iter_recurse(&iter, sub_iter);
while(bson_iter_next(sub_iter) == true)
{
if (bson_iter_find_descendant(&iter, "vol.0", sub_iter))
{
vol[count++] = bson_iter_utf8 (sub_iter, NULL);
}
}
}
else
{
error = -1;
bson_reader_destroy(reader);
}

bson_reader_destroy(reader);

return error;
}

最佳答案

您正在执行多个 bson_iter_find() 命令,并且有可能直接跳过您想要的数据。

您需要为每个查找重新初始化 iter 对象,或者绝对确保您按照查找的顺序调用查找,因为它们被序列化到 bson 文档中。

参见: Does order matter in bson_iter_find in mongo c driver

关于无法在 BSON 对象中找到数组的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41049749/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com