sql >> Database teknologi >  >> NoSQL >> MongoDB

Betyder rækkefølgen i bson_iter_find i mongo c-driver

for at besvare dit spørgsmål direkte, skal du ringe til bson_iter_init (http://api.mongodb. org/libbson/current/bson_iter_init.html ) for hver enkelt "nye" forespørgsel, du laver mod dataene.

Formentlig har du et enkelt bson_iter_init-kald på et bson_t-objekt. Du skal bare have en til.

bson_iter_t iterator1; bson_iter_t iterator2; if (bson_iter_init (&iterator1, doc) && bson_iter_find (&iterator1, "fieldA") ) { //Do something with fieldA } if (bson_iter_init (&iterator2, doc) && bson_iter_find (&iterator2, "fieldB") ) { //Do something with fieldB } bson_free(doc); //DONT FORGET TO DESTROY THE BSON_T object at the end.

eller brug bare den kombinerede kommando bson_iter_init_find (http://api.mongodb.org/ libbson/current/bson_iter_init_find.html ), hvis du ikke ønsker at beskæftige dig med det indre.

bson_iter_t iterator1; bson_iter_t iterator2; if (bson_iter_init_find (&iterator1, doc, "fieldA") ) { //Do something with fieldA } if (bson_iter_init_find (&iterator2, doc,"fieldB") ) { //Do something with fieldB } bson_free(doc); //DONT FORGET TO DESTROY THE BSON_T object at the end.

Hvis du er interesseret i hvorfor, arbejder jeg på bsonsearch (https://github.com/bauman/bsonsearch ) bibliotek og har lignende problemer.

Vær meget forsigtig med, hvordan du håndterer pointer. Næsten alt under motorhjelmen i libbson manipulerer pointere til et område i hukommelsen.

Grunden til at bestille maters er, fordi du initialiserede én gang, da du kaldte iter_find, ville libbson søge forbi B for at finde A . Det efterfølgende kald for at finde B ville søge til slutningen af ​​bufferen og savne den. Du undgår det problem ved at geninitialisere iteratoren tilbage til position 0 og starte søgningen derfra.

Medmindre du ved præcis, hvad du laver og ønsker at optimere søgninger omkring bufferen, er det nok bedst blot at geninitialisere iteratoren for hvert fund.




  1. Advarsel om fortabelse af MongoDB-mangos

  2. Konvertering af HBase ACL'er til Ranger-politikker

  3. Hvordan adskiller MongoDB journalfil og oplog sig?

  4. MongoDB installation i Ubuntu 14.04 mislykkedes