I MongoDB, $rtrim
aggregeringspipeline-operatören tar bort blanksteg från slutet 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 punkter (.
), utropstecken (!
), etc från slutet 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 $rtrim
operatorn för att returnera det fältet med blanktecken borttagen från den högra delen av strängen.
Exempel:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $rtrim: { input: "$type" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "Wag!!!", "type" : " Dog" }
Som förväntat, type
fältet har returnerats utan blanksteg i slutet. Mellanrummet i början finns fortfarande kvar.
Du kan också använda $ltrim
operatorn för att trimma den vänstra 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
$rtrim
operatören accepterar en chars
parameter som låter dig specificera vilka tecken som ska trimmas.
Exempel:
db.pets.aggregate([
{
$project: {
name: { $rtrim: { input: "$name", chars: "!" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "Wag" }
I det här fallet inkluderade vi chars
parameter med ett utropstecken (!
), vilket resulterade i att alla tre utropstecken togs bort från slutet av strängen.
Trim flera tecken
Du kan trimma flera tecken genom att inkludera alla i chars
argument.
Exempel:
db.pets.aggregate([
{
$project: {
name: { $rtrim: { input: "$name", chars: "!g" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "Wa" }
I det här fallet angav jag två tecken som mina chars
argument, och två av dessa tecken råkade vara i slutet 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: { $rtrim: { input: "$name", chars: "!agW" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "" }
Hela strängen har försvunnit. Den har trimmat inte bara !
och g
från strängen, men den har också tagit bort W
och a
tecken.
Trimningsnummer
$rtrim
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: { $rtrim: { input: "$weight", chars: "0" } }
}
}
])
Resultat:
Error: command failed: { "ok" : 0, "errmsg" : "$rtrim 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 $rtrim
operatorn kräver att dess inmatning är en sträng.
Om vi verkligen ville ta bort nollan 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: { $rtrim: { input: { $toString: "$weight" }, chars: "0" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "Wag!!!", "weight" : "2" }
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: { $rtrim: { input: { $toString: "$weight" }, chars: "0" } } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "Wag!!!", "weight" : 2 }