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
|
Adapter |
Hauptklasse des Adapters (nicht verändern!) Mögliche Werte: de.softproject.integration.adapter.mongodb.MongoAdapter: Hauptklasse (Standard) |
|
ConnectionName |
Alias/Referenzname für die Verbindung. Entspricht dem Mögliche Werte: Name der Verbindung (z. B. #default (Standard)) |
|
ReadPreference |
Read-Preference-Modus. Dieser Parameter definiert, wie Reads bearbeitet werden. Mögliche Werte:
Zusätzliche Informationen zu den Read-Preference-Modi finden Sie unter:
|
|
WriteConcern |
Gibt an, ob eine Mögliche Werte:
Zusätzliche 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)
Beachten Sie:
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).
<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.htmlDieses
Value-Element kennt zudem das Attributflags, 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 dieaddSpecial-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-skiplimit, siehe auch http://docs.mongodb.org/manual/reference/method/cursor.limit/#cursor.limitbatchSize, 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
|
|
|
|
|
|
|