sql >> Databasteknik >  >> NoSQL >> MongoDB

Spelar ordning någon roll i bson_iter_find i mongo c-drivrutinen

för att direkt svara på din fråga bör du ringa bson_iter_init (http://api.mongodb. org/libbson/current/bson_iter_init.html ) för varje enskild "ny" fråga du gör mot data.

Förmodligen har du ett enda bson_iter_init-anrop på ett bson_t-objekt. Du behöver bara en till.

   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 använd bara det kombinerade kommandot bson_iter_init_find (http://api.mongodb.org/ libbson/current/bson_iter_init_find.html ) om du inte vill ta itu med internerna.

   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.

Om du är intresserad av varför jobbar jag med bsonsearch (https://github.com/bauman/bsonsearch ) bibliotek och har liknande problem.

Var mycket försiktig med hur du hanterar tips. Nästan allt under huven i libbson manipulerar pekare till ett område i minnet.

Anledningen till att beställa maters är att du initierade en gång, när du anropade iter_find, libbson skulle söka förbi B för att hitta A . Det efterföljande anropet för att hitta B skulle söka till slutet av bufferten och missa det. Du undviker det problemet genom att återinitiera iteratorn till position 0 och starta sökningen därifrån.

Om du inte vet exakt vad du gör och vill optimera sökningar runt bufferten, är det förmodligen bäst att bara återinitiera iteratorn för varje fynd.




  1. Uppdatera array med flera villkor i mongodb

  2. Mongo-skal som ger ut felet Flera förekomster av alternativ

  3. Installera CouchDB på Debian 9

  4. Uppdaterar array med push och skiva