sql >> Databáze >  >> NoSQL >> MongoDB

Záleží na pořadí v bson_iter_find v ovladači mongo c

Chcete-li přímo odpovědět na vaši otázku, měli byste zavolat bson_iter_init (http://api.mongodb. org/libbson/current/bson_iter_init.html ) pro každý jednotlivý „nový“ dotaz, který na data zadáte.

Pravděpodobně máte jediné volání bson_iter_init na objektu bson_t. Potřebujete jen další.

   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.

nebo stačí použít kombinovaný příkaz bson_iter_init_find (http://api.mongodb.org/ libbson/current/bson_iter_init_find.html ), pokud se nechcete zabývat vnitřnostmi.

   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.

Pokud vás zajímá proč, pracuji na bsonsearch (https://github.com/bauman/bsonsearch ) a mají podobné problémy.

Buďte velmi opatrní, jak nakládáte s ukazateli. Téměř vše pod kapotou v libbsonu manipuluje s ukazateli na oblast v paměti.

Důvodem pro objednávání je to, že jste jednou inicializovali, když jste zavolali iter_find, libbson by hledal za B, aby našel A . Následné volání k nalezení B by hledalo konec vyrovnávací paměti a minulo ho. Tomuto problému se vyhnete tím, že znovu inicializujete iterátor zpět do pozice 0 a spustíte vyhledávání odtud.

Pokud přesně nevíte, co děláte, a nechcete optimalizovat hledání ve vyrovnávací paměti, bude pravděpodobně nejlepší znovu inicializovat iterátor pro každé hledání.




  1. Jaký je doporučený přístup k databázím s více nájemci v MongoDB?

  2. DbRef s Mongoose - mongoose-dbref nebo naplnit?

  3. Vrátit zpět convertToCapped do kolekce

  4. Lze mongodb použít jako vestavěnou databázi?