2016-12-08 1 views
0

J'écris une fonction C pour lire un fichier codé bson. J'essaie de trouver la clé d'un tableau. Je sais que la clé existe, parce que bsondump l'imprimera et le tableau sortira. bson_iter_find() renvoie la valeur false lorsque je recherche "vol".Impossible de trouver la clé dans le tableau dans l'objet BSON

est ici la fonction:

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

Répondre

0

vous faites plusieurs commandes bson_iter_find() et il y a une chance que vous saut droit sur les données que vous voulez.

Vous devez réinitialiser l'objet iter pour chaque recherche ou être absolument sûr que vous appelez la recherche dans l'ordre exact car ils sont sérialisés dans le document bson.

Voir: Does order matter in bson_iter_find in mongo c driver