Ich versuche, eine $ in Abfrage mit dem MongoDB Cxx Legacy-Treiber BSONBuilder zu bauen. Bis jetzt bin ich mit dem folgenden Code eine einfache ID zu bauen = „...“ Abfrage einzelne Dokumente aus meiner MongoDB-Sammlung zu laden:
BSONObjBuilder b;
b.append("_ID", "...");
BSONObj p = b.obj();
Nun mag ich eine Abfrage zu erzeugen, wie z.B.
{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }
und es verwendet, eine Reihe von Dokumenten über die Schnittstelle zu erhalten:
...
auto_ptr<DBClientCursor> cursor = c.query("tutorial.persons", p);
while (cursor->more())
cout << cursor->next().toString() << endl;
....
Hat jemand von euch wissen, wie ein $ in Abfrage zu erstellen, die BSONObjBuilder verwenden? Oder gibt es einen anderen Trick, um 10 Dokumente mit einer Abfrage nach ID abzufragen?
Vielen Dank.
Update:
Ich habe versucht, den folgenden Code-Schnipsel.
mongo::BSONObjBuilder oBuilder;
// oBuilder.append(STR_FIELD_PARENT_ITEM_ID, aIDs);
mongo::BSONArrayBuilder oJsonIDarr;
for(unsigned int ii = 0; ii < aIDs.size(); ii++) {
oJsonIDarr << aIDs[ii];
}
oBuilder.append("$in", oJsonIDarr.arr());
BOOSTER_WARNING("Comment_Mongo") << "query: " << oBuilder.obj();
mongo::BSONObjBuilder oQueryObj;
oQueryObj.append(STR_FIELD_ID, oBuilder.obj());
BOOSTER_WARNING("Comment_Mongo") << "query: " << oQueryObj.obj();
Die erste Abfrage obj sieht z.B.
query: { $in: [ "585c27f903733890966a618d", "585c278ed7cd3684afe5b495" ] }
und löst eine Ausnahme, sobald/Treiber MongoDB gesendet ..
die zweite druckt die folgende Abfrage:
query: { _id: {} }
Ich bin glücklich über jeden tipp! Danke vielmals!
Hallo Sagar, danke für die Antwort! Ich habe es gerade versucht .. Aber es generiert nur die "{$ in: [, , ... ]}" Teil .. Wissen Sie, wie Sie das "Feld" auch hinzufügen? Danke noch einmal! –
AlexM
Aktualisiert. Sehen Sie, ob es hilft. – Veeram
Hallo, ich habe es in meiner Quelle geändert. SIGSEGV (Segmentierungsfehler) wird ausgelöst, sobald die Zeile mit "b.done()" erreicht wird. Haben Sie eine andere Idee? :> Vielen Dank für Ihre Hilfe! – AlexM