MongoDB Connector: Stellt eine Verbindung zu einer MongoDB her und führt ein oder mehrere Datenbank-Statements aus, die als Input-XML-Dokument mit adapterspezifischen Strukturen übergeben wurden.
Parameter
|
|
Alias/Referenzname für die Verbindung. Entspricht dem Mögliche Werte: Name der Verbindung (z. B. |
|
|
Read-Preference-Modus. Dieser Parameter definiert, wie Reads bearbeitet werden. Mögliche Werte:
Weitere Informationen zu den Read-Preference-Modi finden Sie unter: |
|
|
Gibt an, ob eine Mögliche Werte:
Dieser Write Concern ist veraltet und verfügt über keinen Ersatz. Am ehesten vergleichbar ist der Write Concern
Hinweis:
Dieser Write Concern wurde durch den Write Concern
Dieser Write Concern wurde durch den Write Concern
Dieser Write Concern wurde durch den Write Concern
Dieser Write Concern wurde durch den Write Concern
Dieser Write Concern wurde durch den Write Concern
Dieser Write Concern wurde durch den Write Concern Weitere Informationen zu den Write Concerns finden Sie unter: |
Statuswerte
|
|
Die Operation wurde erfolgreich ausgeführt. |
|
|
Die Operation wurde erfolgreich ausgeführt, jedoch ohne Ergebnis. |
|
|
Die Operation ist aufgrund eines technischen Fehlers fehlgeschlagen. |
Verbindung konfigurieren
Die Verbindung zur MongoDB wird in der mongodb-connections.xml innerhalb des X4-Installationsordners konfiguriert, z. B. X4\Server\X4DB\0\mongodb-connections.xml.
<MongoDB>
<!-- connects to localhost on the default port without authentication -->
<Connection name="#default" db="test"/>
<Connection name="localhost" db="test">
<Server host="localhost" port="27017"/>
</Connection>
</MongoDB>
Erläuterung:
-
/MongoDB/Connection: Stellt eine benannte Verbindung dar. Kann mehrfach existieren. -
/MongoDB/Connection/@name: Alias/Referenzname für die Verbindung -
/MongoDB/Connection/@db: Name der Datenbank zu der die Verbindung hergestellt werden soll, d.h., Datenbanken müssen immer über externe Werkzeuge (z .B. MongoShell) angelegt werden. -
/MongoDB/Connection/Server: Stellt einen Servereintrag für eine Verbindung dar. Kann mehrfach pro Connection existieren, um einen Cluster zu adressieren. -
/MongoDB/Connection/Server/@host: IP/DNS-Name des Servers, zu dem eine Verbindung hergestellt werden soll (default: 127.0.0.1). -
/MongoDB/Connection/Server/@port: Port des Servers, zu dem eine Verbindung hergestellt werden soll (default: 27017). -
/MongoDB/Connection/Credential: Anmeldedaten für eine Verbindung. Kann mehrfach pro Verbindung existieren. -
/MongoDB/Connection/Credential/@user: Benutzername der Anmeldung -
/MongoDB/Connection/Credential/@password: Passwort der Anmeldung -
/MongoDB/Connection/Credential/@source: Ursprung der Anmeldedaten (Nutzung zZt. unklar)
Hinweis:
Wenn eine Verbindung keine Serverelemente besitzt, wird unabhängig davon, ob Credential-Elemente existieren, ohne Authentifizierungsdaten eine Verbindung mit localhost:27017 hergestellt.
Kodierung einer Dokumentenstruktur
Die JSON/Mongo-Dokumente werden nach einfachen Regeln in ihr XML-Äquivalent übersetzt:
-
Dokumente und Objekte/Substrukturen werden durch
<Object>dargestellt. Die Schlüssel-Wert-Einträge eines Objekts werden als Kindelemente desObject-Elements abgebildet. -
Arrays werden durch
<Array>dargestellt. Die Array-Einträge werden als Kindelemente desArray-Elements abgebildet. -
Wenn es kein Array oder Object ist, wird es durch
<Value>dargestellt. -
Der Datentyp eines Values wird in dem Attribut
typeauf demValue-Element festgehalten (siehe Unterstützte Datentypen). Wenn kein Datentyp angegeben ist, wirdStringangenommen. -
Die Schlüssel-Wert-Einträge eines Objektes oder eine Substruktur bekommen den Schlüssel als
name-Attribute auf das Element des Wert-Elements gesetzt.
Invarianten:
-
Für jede
{im JSON wird einObject-Element im XML angelegt. (Ausnahme: Die Dokumentenwurzel wird in Kommandos durch andere Elemente abgebildet.) -
Für jede
[im JSON wird einArray-Element im XML angelegt. -
Für jeden
:im JSON (der nicht Bestandteil eines String-Literals ist) wird einname-Attribut angelegt, das den Wert vor dem:als Inhalt enthält. -
Alle Kindelemente eines
Object-Elements haben einname-Attribut. -
Kindelemente eines
Array-Elements haben keinname-Attribut. -
Value-Elemente haben kein Kindelement. -
Text-Knoten existieren nur als Kinder vonValue-Elementen (Ausnahme: formatierender Whitespace). -
type-Attribute existieren nur aufValue-Elementen (aber nicht jedesValue-Element muss eintype-Attribute haben).
Beispiel
<Object>
<Value name="some" type="String">thing</Value>
</Object>
Die Dokumenten-Wurzel kann auch durch andere Elemente ersetzt werden, um die Erzeugung eines Object-Elements zu vermeiden. In diesem Fall wäre dort immer ein Object-Element notwendig.
Unterstützte Datentypen
Der Adapter unterstützt folgende Datentypen:
-
Null -
ObjectId -
Boolean -
Long -
Int -
Double -
String -
DateTime -
Integer: String wird alsBigIntegergelesen und anschließend alsLonggespeichert. -
Decimal: String wird alsBigDecimalgelesen und anschließend alsDoublegespeichert. -
Numeric: Wenn der String einen.enthält, wird er alsDecimalgelesen, sonst alsInteger. -
RegEx: regulärer Ausdruck gemäß http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
Dieses Value-Element kennt zudem das Attribut flags, welches einen String aus folgenden Zeichen ist und die entsprechende Option auf dem Muster setzt:
-
c: CANON_EQ -
i: CASE_INSENSITIVE -
m: MULTILINE -
s: DOTALL -
u: UNICODE_CASE -
L: LITERAL -
N: UNIX_LINES -
U: UNICODE_CHARACTER_CLASS -
Z: COMMENTS
Input
Der MongoDB Adapter erwartet spezifische Input-XML-Strukturen. Diese Input-XML-Strukturen enthalten eine Wurzel mit mehreren Kommandos darunter. Ebenso wird auch das resulttag-Attribut unterstützt.
Input-Struktur
<!-- Ein Root-Element mit beliebigem Namen. -->
<root>
<insert collection="products" resulttag="insertOutput">
<Value name="item" type="String">card</Value>
<Value name="qty" type="Integer">15</Value>
</insert>
<find collection="products" resulttag="findOutput">
<query>
<Value name="item" type="String">card</Value>
</query>
</find>
<!-- Hier können weitere Kommandos angegeben werden. -->
</root>
Dies ist ein vollständiges und ausführbares Beispiel. Alle nachfolgenden Beispiele sind lediglich Ausschnitte, die zur Ausführung in eine vollständige Input-Struktur mit einem umschließenden Root-Element eingefügt werden müssen.
Unterstützte Kommandos
-
copy(kein MongoDB-Kommando) -
find -
insert -
remove -
save -
update
Kommando copy
Mit copy werden alle Kindelemente des copy-Kommandos in die Ausgabe kopiert.
Input
Das copy-Kommando hat folgende Syntax:
<copy resulttag="output">
<Child1/>
<Child2>
<Grandchild1/>
<Grandchild2/>
</Child2>
</copy>
Output
Dieses Kommando gibt folgende XML-Struktur aus:
<output>
<Child1/>
<Child2>
<Grandchild1/>
<Grandchild2/>
</Child2>
</output>
Kommando insert
Mit insert wird ein Dokument in die Collection eingefügt. Das insert-Element ist dabei gleichzeitig die Dokumentenwurzel.
-
Bitte beachten Sie, dass
Batchinsertmitinsertnicht unterstützt wird. -
Weitere Informationen zu diesem Kommando finden Sie unter http://docs.mongodb.org/manual/reference/method/db.collection.insert/#db.collection.insert.
Input
Das insert-Kommando hat folgende Syntax:
<insert collection="foo">
<Value name="bar" type="String">baz</Value>
</insert>
Output
Dieses Kommando gibt ein WriteResult-Objekt aus, das den Status der Operation enthält.
Kommando save
Mit save wird gemäß mitgegebenen Daten ein neues Dokument angelegt oder ein bestehendes Dokument aktualisiert. Das save-Element ist dabei gleichzeitig die Dokumentenwurzel.
Weitere Informationen zu diesem Kommando finden Sie unter http://docs.mongodb.org/manual/reference/method/db.collection.save/#db.collection.save.
Input
Das save-Kommando hat folgende Syntax:
<save collection="foo">
<Value name="bar" type="String">baz</Value>
</save>
Output
Dieses Kommando gibt ein WriteResult-Objekt aus, das den Status der Operation enthält.
Kommando update
Mit update wird ein Dokument in einer Collection modifiziert. Je nach update-Parameter kann die Methode spezielle Felder eines bereits bestehenden Dokuments oder ein komplettes Dokument modifizieren.
Weitere Informationen zu diesem Kommando finden Sie unter http://docs.mongodb.org/manual/reference/method/db.collection.update/#db.collection.update.
Input
Das update-Kommando hat folgende Syntax:
<update collection="foo">
<query/>
<update upsert="false" multi="false"/>
</update>
Erläuterung:
-
Das
query-Element enthält den Abfrage/Selektionsteil desupdate-Elements und ist auch Dokumentenwurzel für die Abfrage. -
Das
update-Element enthält den Veränderungsteil des Updates und ist auch Dokumentenwurzel für die Veränderung. -
Die Optionen
upsertundmultiwerden auf dem innerenupdate-Element angegeben.
Output
Dieses Kommando gibt ein WriteResult-Objekt aus, das den Status der Operation enthält.
Kommando remove
Mit remove wird ein Dokument aus einer Collection entfernt.
Weitere Informationen zu diesem Kommando finden Sie unter http://docs.mongodb.org/manual/reference/method/db.collection.remove/#db.collection.remove.
Input
Das remove-Kommando hat folgende Syntax:
<remove collection="foo">
<query/>
</remove>
Erläuterung:
-
Das
query-Element enthält den Abfrage/Selektionsteil desremove-Elements und ist auch Dokumentenwurzel für die Abfrage.
Beachten Sie, dass die Option justOne durch den Java-Treiber nicht unterstützt wird.
Output
Dieses Kommando gibt ein WriteResult-Objekt aus, das den Status der Operation enthält.
Kommando find
Mit find wird ein Dokument aus einer Collection selektiert.
Weitere Informationen zu diesem Kommando finden Sie unter http://docs.mongodb.org/manual/reference/method/db.collection.find/#db.collection.find.
Input
Das find-Kommando hat folgende Syntax:
<find collection="foo">
<--! Optional elements -->
<query/>
<projection/>
<sort/>
<hint/>
<min/>
<max/>
<special/>
<cursor skip="0" limit="0" batchSize="0"/>
</find>
Erläuterung:
-
Das
query-Element enthält den Abfrage/Selektionsteil desfind-Elements und ist auch Dokumentenwurzel für die Abfrage. -
Das
projection-Element enthält die Feldauswahl desfind-Elements und ist auch Dokumentenwurzel für die Auswahl.
Die weiteren optionalen Elemente steuern das Verhalten des Ergebnis-Cursors:
-
sort(Dokumentenwurzel), siehe auch http://docs.mongodb.org/manual/reference/method/cursor.sort/#cursor.sort -
hint(Dokumentenwurzel), siehe auch http://docs.mongodb.org/manual/reference/method/cursor.hint/#cursor.hint -
min(Dokumentenwurzel), siehe auch http://docs.mongodb.org/manual/reference/method/cursor.min/#cursor.min -
max(Dokumentenwurzel), siehe auch http://docs.mongodb.org/manual/reference/method/cursor.max/#cursor.max -
special(quasi-Dokumentenwurzel), siehe auch http://api.mongodb.org/java/current/com/mongodb/DBCursor.html#addSpecial(java.lang.String,%20java.lang.Object)
Für jeden Kindknoten in der Wurzel des special-Dokuments wird die addSpecial-Methode aufgerufen.
-
cursor(no body) ist lediglich der Träger für folgende drei Attribute:-
skip, siehe auch http://docs.mongodb.org/manual/reference/method/cursor.skip/#cursor-skip -
limit, siehe auch http://docs.mongodb.org/manual/reference/method/cursor.limit/#cursor.limit -
batchSize, siehe auch http://docs.mongodb.org/manual/reference/method/cursor.batchSize/#cursor.batchSize
-
Output
Dieses Kommando gibt einen Cursor aus, der auf die Dokumente zeigt, welche die query-Kriterien erfüllen.
Beispiele
Folgende Beispiele zeigen Mongo-Ausdrücke und ihre jeweiligen Entsprechungen in XML.
Beispiele für die Dokumentenstruktur:
|
JSON/Mongo-Struktur |
Entsprechende XML-Struktur |
|---|---|
|
XML
|
|
XML
|
|
XML
|
|
XML
|
|
XML
|
Beispiele für Aufrufe:
|
Mongo-Aufruf |
Entsprechende XML-Struktur |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
oder
|
|
oder
|
|
|
|
|