MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Има ли значение редът в bson_iter_find в mongo c драйвер

за да отговорите директно на въпроса си, трябва да се обадите на bson_iter_init (http://api.mongodb. org/libbson/current/bson_iter_init.html ) за всяка отделна „нова“ заявка, която правите спрямо данните.

Предполага се, че имате едно извикване на bson_iter_init на bson_t обект. Просто имате нужда от друг.

   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.

или просто използвайте комбинираната команда bson_iter_init_find (http://api.mongodb.org/ libbson/current/bson_iter_init_find.html ), ако не искате да се занимавате с вътрешностите.

   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.

Ако се интересувате защо, работя върху bsonsearch (https://github.com/bauman/bsonsearch ) библиотека и имате подобни проблеми.

Бъдете много внимателни как се справяте с указателите. Почти всичко под капака в libbson манипулира указатели към област в паметта.

Причината за подреждането на maters е, че сте инициализирали веднъж, когато сте извикали iter_find, libbson ще търси след B, за да намери A . Последващото извикване за намиране на B ще търси края на буфера и ще го пропусне. Вие избягвате този проблем, като инициализирате отново итератора обратно в позиция 0 и започнете търсенето от там.

Освен ако не знаете точно какво правите и искате да оптимизирате търсенето около буфера, вероятно е най-добре просто да инициализирате повторно итератора за всяко намиране.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb уникален рядък индекс

  2. mongodb филтърни документи с дължина, ширина и конкретно разстояние

  3. Mongoose актуализира дълбоки масиви

  4. mongoose поддържа ли виртуални полета в select като SQL

  5. Коригирайте „дължина/ширина е извън границите“ в MongoDB при създаване на индекс на 2dsphere