In MongoDB der $split
Der Aggregations-Pipeline-Operator teilt eine Zeichenfolge basierend auf einem Trennzeichen in ein Array von Teilzeichenfolgen auf.
Das Trennzeichen wird aus dem String entfernt und die Teilstrings werden als Elemente zum Array hinzugefügt.
Um $split
zu verwenden , geben Sie die Zeichenfolge und das Trennzeichen an.
Wenn das Trennzeichen nicht in der Zeichenfolge gefunden wird, wird die ursprüngliche Zeichenfolge als einziges Element im Array zurückgegeben.
Beispiel 1
Angenommen, wir haben eine Sammlung namens test
mit folgendem Dokument:
{ "_id" : 1, "data" : "March-18-2020" }
Wir können $split
verwenden um die data
aufzuteilen Feld am Bindestrich.
db.test.aggregate(
[
{ $match: { _id: 1 } },
{
$project:
{
_id: 0,
result: { $split: [ "$data", "-" ] }
}
}
]
)
Ergebnis:
{ "result" : [ "March", "18", "2020" ] }
Beispiel 2
Angenommen, wir haben das folgende Dokument:
{ "_id" : 2, "data" : "Sydney, Australia, NSW 2000" }
Wir können $split
verwenden um das Datenfeld nach Komma und Leerzeichen zu trennen:
db.test.aggregate(
[
{ $match: { _id: 2 } },
{
$project:
{
_id: 0,
result: { $split: [ "$data", ", " ] }
}
}
]
)
Ergebnis:
{ "result" : [ "Sydney", "Australia", "NSW 2000" ] }
Beispiel 3
Hier ist noch ein Beispiel. Dieses Mal werden wir die Zeichenfolge basierend auf dem Leerzeichen zwischen den einzelnen Wörtern aufteilen.
Musterdokument:
{ "_id" : 3, "data" : "Homer Jay Einstein" }
Teilen wir es auf:
db.test.aggregate(
[
{ $match: { _id: 3 } },
{
$project:
{
_id: 0,
result: { $split: [ "$data", " " ] }
}
}
]
)
Ergebnis:
{ "result" : [ "Homer", "Jay", "Einstein" ] }
Falscher Datentyp
Die beiden Argumente müssen Zeichenfolgen sein. Die Angabe des falschen Datentyps führt zu einem Fehler.
Beispiel:
db.test.aggregate(
[
{ $match: { _id: 1 } },
{
$project:
{
_id: 0,
result: { $split: [ "$data", 18 ] }
}
}
]
)
Ergebnis:
Error: command failed: { "ok" : 0, "errmsg" : "$split requires an expression that evaluates to a string as a second argument, found: double", "code" : 40086, "codeName" : "Location40086" } : aggregate failed : [email protected]/mongo/shell/utils.js:25:13 [email protected]/mongo/shell/assert.js:18:14 [email protected]/mongo/shell/assert.js:639:17 [email protected]/mongo/shell/assert.js:729:16 [email protected]/mongo/shell/db.js:266:5 [email protected]/mongo/shell/collection.js:1058:12 @(shell):1:1
Wie die Fehlermeldung besagt, erfordert $split requires an expression that evaluates to a string as a second argument, found: double
.