2016-11-30 8 views
0

Beim Hinzufügen eines Arrays zu einem Dokument müssen open_array und close_array gleichzeitig in den Dokumentenstrom geworfen werden. Der folgende Code schlägt fehl (Kompilierzeit) in der letzten Zeile beim Hinzufügen von 'close_array'.MongoDB C++, Hinzufügen eines Arrays zum Dokument fehlgeschlagen

vector<string> List; 
... 

document Doc; 
Doc <<"List" <<open_array; 
for (string Str: List) { 
    Doc <<Str; 
} 
Doc <<close_array; 

Aber ich kenne nicht die Anzahl der Elemente in der 'Liste', um das Dokument zur gleichen Zeit hinzuzufügen. In MongoDB fehlen noch Beispiele für den C++ - Treiber.

Dieser Code funktioniert, aber die Anzahl der Elemente in der 'Liste' ist nicht bekannt.

Doc 
<<open_array 
<<List[0] <<List[1] <<List[2] <<... 
<<close_array; 

G ++ Fehler:

content.cpp:65:7: error: no match for ‘operator<<’ (operand types are ‘bsoncxx::v_noabi::builder::stream::document’ and ‘const bsoncxx::v_noabi::builder::stream::close_array_type’) 
    Doc <<close_array; 
    ~~~~^~~~~~~~~~~~~ 
compilation terminated due to -Wfatal-errors. 

Antwort

0

eine Lösung gefunden, von Adding a BSON Array to a MongoDB 3.2 document and extracting the values back (MongoCXX 3.2) (C++ 11)

Es nicht in der Lage ist, den 'close_array' auf das Dokument selbst hinzuzufügen, muss sie durch‘ein Array Builder hinzugefügt werden (tippe 'auto', ich habe es nicht ausgegraben, um den richtigen Typ zu finden).

auto Array = Doc <<"List" <<open_array; 
for (string Str: List) 
    Array <<Str; 
Array <<close_array; 

zu beachten, dass der obige Code funktioniert gut, aber das Folgende nicht

auto Array = Doc <<"List"; 
Array <<open_array; 
for (string Str: List) 
    Array <<Str; 
Array <<close_array; 
+0

Wissen Sie, ob das in 3.0 auch funktioniert? Ich denke, es ist nicht ... –

+0

Ich baue mongodb C++ Treiber 3.1.0 von https://github.com/mongodb/mongo-cxx-driver/archive/r3.1.0.tar.gz – johnlowvale

+0

Gebäude Array wie in der Code in meiner Antwort funktioniert gut – johnlowvale

Verwandte Themen