MongoDB Connector
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
1 | Die Operation wurde erfolgreich ausgeführt. |
0 | Die Operation wurde erfolgreich ausgeführt, jedoch ohne Ergebnis. |
-1 | 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).
Beispiel
<Object>
<Value name="some" type="String">thing</Value>
</Object>
Object-Elements zu vermeiden. In diesem Fall wäre dort immer ein Object-Element notwendig.
Unterstützte Datentypen
Der Adapter unterstützt folgende Datentypen:
NullObjectIdBooleanLongIntDoubleStringDateTimeInteger: 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_EQi: CASE_INSENSITIVEm: MULTILINEs: DOTALLu: UNICODE_CASEL: LITERALN: UNIX_LINESU: UNICODE_CHARACTER_CLASSZ: 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.
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.
Input
Das update-Kommando hat folgende Syntax:
<update collection="foo">
<query/>
<update upsert="false" multi="false"/>
</update>
- 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.
Input
Das remove-Kommando hat folgende Syntax:
<remove collection="foo">
<query/>
</remove>
- Das
query-Element enthält den Abfrage/Selektionsteil desremove-Elements und ist auch Dokumentenwurzel für die Abfrage.
justOne durch den Java-Treiber nicht unterstützt wird.
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.
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>
- 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.sorthint(Dokumentenwurzel), siehe auch http://docs.mongodb.org/manual/reference/method/cursor.hint/#cursor.hintmin(Dokumentenwurzel), siehe auch http://docs.mongodb.org/manual/reference/method/cursor.min/#cursor.minmax(Dokumentenwurzel), siehe auch http://docs.mongodb.org/manual/reference/method/cursor.max/#cursor.maxspecial(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
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 |
|---|---|
CODE
|
XML
|
CODE
|
XML
|
CODE
|
XML
|
CODE
|
XML
|
CODE
|
XML
|
Beispiele für Aufrufe:
| Mongo-Aufruf | Entsprechende XML-Struktur |
|---|---|
CODE
|
CODE
|
CODE
|
CODE
|
CODE
|
CODE
|
CODE
|
CODE
|
CODE
|
CODE
|
CODE
|
CODE
|
CODE
|
CODE
|
CODE
|
CODE
|
CODE
|
CODE
|
CODE
|
CODE
oder
CODE
|
CODE
|
CODE
oder
CODE
|
CODE
|
CODE
|
CODE
|
CODE
|