2016-03-30 14 views
0

BSONElement Klasse hat eine embeddedObject() Methode zurückzukehren BSONObj „codiert“ im BSON Elemente, zB Erhalten:BSONArray von BSONElement in einer direkten Art und Weise

// being 'be' a BSONElement object 
BSONObj b = be.embeddedObject(); 

jedoch manchmal das BSONElement Objekt codiert eine BSONArray (eine abgeleitete Klasse von BSONObj) und ich möchte es direkt bekommen. So etwas wie

// being 'be' a BSONElement object 
BSONArray b = be.embeddedArray(); 

aber ich habe keine embeddedArray() oder ähnliches in the MongoDB C++ driver documentation reference that I know finden.

Ich habe eine Array() Methode in BSONElement Klasse gefunden, aber es gibt std::vector<BSONElement> und die äquivalenten BSONArray basierend auf Vektor Inhalt Komponieren wäre viel komplizierter (unter Berücksichtigung, dass jedes Element in dem Vektor unterschiedlicher Art sein könnte, also Strings , Zahlen, andere BSON-Objekte oder Arrays usw.).

Gibt es eine Möglichkeit, den BSONArray direkt in eine BSONElement "codiert" zu bekommen?

Antwort

0

Es scheint, dass in der folgenden Art und Weise zu BSONArray Gießen kann arbeiten,:

BSONArray b = (BSONArray) be.embeddedObject(); 

Diese Umwandlung im allgemeinen Fall nicht sicher ist, aber in Kombination mit type() können wir sicherstellen, dass be tatsächlich ein eingebettetes Array zu halten.

Allerdings frage ich mich immer noch, ob ein klügerer Weg möglich ist ... Fühlen Sie sich frei, eine neue Antwort auf diese Frage mit alternativen Mitteln hinzuzufügen, bitte.

Verwandte Themen