2016-12-28 1 views
0

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!

Antwort

0

Sie können etwas wie unten versuchen.

BSONObjBuilder b; 
BSONArrayBuilder bab; 
bab.append("val"); 
b.append("$in", bab.arr())); 
BSONObjBuilder id; 
id.append("_id", b.done()); 
BSONObj p = b.obj(); 
+0

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

+0

Aktualisiert. Sehen Sie, ob es hilft. – Veeram

+0

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

Verwandte Themen