【问题标题】:Cannot Find Key to Array in BSON object在 BSON 对象中找不到数组的键
【发布时间】:2017-04-24 07:15:28
【问题描述】:

我正在编写一个 C 函数来读取 bson 编码文件。我正在尝试找到数组的关键。我知道密钥存在,因为 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;
}

【问题讨论】:

    标签: c arrays mongodb bson database


    【解决方案1】:

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

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

    见: Does order matter in bson_iter_find in mongo c driver

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 2017-12-24
      • 2015-09-16
      • 2018-03-04
      相关资源
      最近更新 更多