Na przykład, jeśli mogę to zrobić w skorupkachJak zapisać tablicę mongodów do wektora za pomocą sterownika C++?
> db.numbers.save({ name: "fibonacci", arr: [0, 1, 1, 2, 3, 5, 8, 13, 21] })
Następnie chcę uzyskać arr
w moim programie C++.
Po mam BSONObj mogę dostać name
z
std::string name = p.getStringField("name");
gdzie p
jest obiektem BSON.
Ale jaki jest właściwy sposób na pobranie elementów z tablicy i zapisanie ich w std :: vector?
EDIT:
Po kilku dalszych badań znalazłem dokumentację BSONElement Doxygen i uczynił to.
std::vector<int> arr;
std::vector<BSONElement> v = p.getField("arr").Array();
for(std::vector<BSONElement>::iterator it = v.begin(); it != v.end(); ++it)
arr.push_back(it->numberInt());
Ale nadal nie jestem pewien, czy jest to właściwa droga.
Mam nadzieję, że pierwsza forma jest o wiele lepsza, ponieważ zbiór elementów do załadowania staje się duży, ponieważ implementacja ma szansę na wywołanie 'boost :: wektor <> :: reserve()' z ostatecznym rozmiarem wektora – lurscher
W rzeczywistości tak nie jest. Ze względu na sposób, w jaki rozkłada się format BSON, nie ma sposobu, aby wiedzieć, ile elementów znajduje się w obiekcie/macierze bez wykonywania iteracji. Jeśli spojrzysz na implementację vals, zobaczysz, że jest prawie identyczny z drugą wersją. Jakie różnice istnieją, bardziej prawdopodobne jest, że będzie (nieco) wolniej, ale nie na tyle, aby to miało znaczenie. – mstearn
oh, to źle. – lurscher