untuk langsung menjawab pertanyaan Anda, Anda harus menghubungi bson_iter_init (http://api.mongodb. org/libbson/current/bson_iter_init.html ) untuk setiap kueri "baru" yang Anda buat terhadap data.
Agaknya Anda memiliki satu panggilan bson_iter_init pada objek bson_t. Anda hanya perlu yang lain.
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.
atau, cukup gunakan perintah gabungan bson_iter_init_find (http://api.mongodb.org/ libbson/current/bson_iter_init_find.html ) jika Anda tidak ingin berurusan dengan internal.
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.
Jika Anda tertarik dengan alasannya, saya mengerjakan bsonsearch (https://github.com/bauman/bsonsearch ) perpustakaan dan memiliki masalah serupa.
Berhati-hatilah dalam menangani pointer. Hampir semua hal yang tersembunyi di libbson memanipulasi pointer ke suatu area di memori.
Alasan pengurutan materi adalah karena Anda menginisialisasi sekali, ketika Anda memanggil iter_find, libbson akan mencari melewati B untuk menemukan A . Panggilan berikutnya untuk menemukan B akan mencari ke akhir buffer dan melewatkannya. Anda menghindari masalah itu dengan menginisialisasi ulang iterator kembali ke posisi 0 dan memulai pencarian dari sana.
Kecuali Anda tahu persis apa yang Anda lakukan dan ingin mengoptimalkan pencarian di sekitar buffer, mungkin yang terbaik adalah menginisialisasi ulang iterator untuk setiap temuan.