In MongoDB, de $split
aggregatiepijplijnoperator verdeelt een string in een array van substrings op basis van een scheidingsteken.
Het scheidingsteken wordt uit de tekenreeks verwijderd en de subtekenreeksen worden als elementen aan de array toegevoegd.
Om $split
te gebruiken , geeft u de tekenreeks en het scheidingsteken op.
Als het scheidingsteken niet in de tekenreeks wordt gevonden, wordt de oorspronkelijke tekenreeks geretourneerd als het enige item in de array.
Voorbeeld 1
Stel dat we een verzameling hebben met de naam test
met het volgende document:
{ "_id" : 1, "data" : "March-18-2020" }
We kunnen $split
. gebruiken om de data
te splitsen veld bij het koppelteken.
db.test.aggregate(
[
{ $match: { _id: 1 } },
{
$project:
{
_id: 0,
result: { $split: [ "$data", "-" ] }
}
}
]
)
Resultaat:
{ "result" : [ "March", "18", "2020" ] }
Voorbeeld 2
Stel dat we het volgende document hebben:
{ "_id" : 2, "data" : "Sydney, Australia, NSW 2000" }
We kunnen $split
. gebruiken om het gegevensveld te scheiden op basis van komma en spatie:
db.test.aggregate(
[
{ $match: { _id: 2 } },
{
$project:
{
_id: 0,
result: { $split: [ "$data", ", " ] }
}
}
]
)
Resultaat:
{ "result" : [ "Sydney", "Australia", "NSW 2000" ] }
Voorbeeld 3
Hier is nog een voorbeeld. Deze keer gaan we de string splitsen op basis van de ruimte tussen elk woord.
Voorbeelddocument:
{ "_id" : 3, "data" : "Homer Jay Einstein" }
Laten we het opsplitsen:
db.test.aggregate(
[
{ $match: { _id: 3 } },
{
$project:
{
_id: 0,
result: { $split: [ "$data", " " ] }
}
}
]
)
Resultaat:
{ "result" : [ "Homer", "Jay", "Einstein" ] }
Onjuist gegevenstype
De twee argumenten moeten strings zijn. Het verstrekken van het verkeerde gegevenstype resulteert in een fout.
Voorbeeld:
db.test.aggregate(
[
{ $match: { _id: 1 } },
{
$project:
{
_id: 0,
result: { $split: [ "$data", 18 ] }
}
}
]
)
Resultaat:
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
Zoals de foutmelding aangeeft, vereist $split requires an expression that evaluates to a string as a second argument, found: double
.