I MongoDB, $ltrim
aggregeringspipeline-operatören tar bort blanksteg från början av en sträng. Detta inkluderar null-tecknet.
Det kan också ta bort alla angivna tecken. Du kan till exempel använda den för att ta bort alla bindestreck (-
) från början av en sträng.
Exempel
Anta att vi har en samling som heter pets
med följande dokument:
{ "_id" : 1, "name" : "-Wag", "type" : " Dog ", "weight" : 20 }
Vi kan se att type
fältet innehåller blanksteg på båda sidor av ordet Dog
. Vi kan använda $ltrim
operatorn för att returnera det fältet med blanktecken borttagen från den vänstra delen av strängen.
Exempel:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $ltrim: { input: "$type" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "-Wag", "type" : "Dog " }
Som förväntat, type
fältet har returnerats utan blanksteg i början. Det blanka utrymmet i slutet finns fortfarande kvar.
Du kan också använda $rtrim
operatorn för att trimma den högra delen av strängen och $trim
operatör för att trimma båda sidor av strängen.
Det finns en hel del tecken som MongoDB anser vara blanksteg. Se MongoDB Whitespace-tecken för en fullständig lista.
Trimma andra tecken
$ltrim
operatören accepterar en chars
parameter som låter dig specificera vilka tecken som ska trimmas.
Exempel:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "-" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "Wag" }
I det här fallet inkluderade vi chars
parameter med bindestreck (-
), vilket resulterade i att bindestrecket togs bort från början av ordet.
Trim flera tecken
Du kan trimma flera tecken genom att inkludera alla i chars
argument.
Exempel:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "W-" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "ag" }
I det här fallet angav jag två tecken som mina chars
argument, och två av dessa tecken råkade vara i början av strängen. Därför trimmades dessa två karaktärer.
Var dock försiktig när du gör detta. Så här händer när jag inkluderar alla tecken:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "W-ag" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "" }
Hela strängen har försvunnit. Den har trimmat inte bara -
och W
från strängen, men den har också tagit bort a
och g
tecken.
Trimningsnummer
$ltrim
operatören arbetar på strängar. Om vi försöker trimma weight
fältet får vi ett fel. Detta beror på att weight
fältet är ett nummer, inte en sträng.
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $ltrim: { input: "$weight", chars: "2" } }
}
}
])
Resultat:
Error: command failed: { "ok" : 0, "errmsg" : "$ltrim requires its input to be a string, got 20 (of type double) instead.", "code" : 50699, "codeName" : "Location50699" } : aggregate failed : [email protected]/mongo/shell/utils.js:25:13 [email protected]/mongo/shell/assert.js:18:14 [email protected]/mongo/shell/assert.js:618:17 [email protected]/mongo/shell/assert.js:708:16 [email protected]/mongo/shell/db.js:266:5 [email protected]/mongo/shell/collection.js:1046:12 @(shell):1:1
Felet talar om för oss att vi tillhandahållit en dubbel och att $ltrim
operatorn kräver att dess inmatning är en sträng.
Om vi verkligen ville ta bort 2:an måste vi först konvertera den till en sträng. Vi kan göra det med antingen $convert
eller $toString
operatör.
Exempel:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "-Wag", "weight" : "0" }
Vi kan få tillbaka det till en dubbel genom att använda antingen $convert
eller $toDouble
operatör.
Fullständigt exempel:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $toDouble: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "-Wag", "weight" : 0 }