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
type
auf demValue
-Element festgehalten (siehe Unterstützte Datentypen). Wenn kein Datentyp angegeben ist, wirdString
angenommen. - 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:
Null
ObjectId
Boolean
Long
Int
Double
String
DateTime
Integer
: String wird alsBigInteger
gelesen und anschließend alsLong
gespeichert.-
Decimal
: String wird alsBigDecimal
gelesen und anschließend alsDouble
gespeichert. Numeric
: Wenn der String einen.
enthält, wird er alsDecimal
gelesen, 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
Batchinsert
mitinsert
nicht 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
upsert
undmulti
werden 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
|