I MongoDB er $rtrim
aggregeringspipeline-operatør fjerner mellemrum fra enden af en streng. Dette inkluderer null-tegnet.
Det kan også fjerne ethvert angivet tegn. For eksempel kan du bruge det til at fjerne alle punktum (.
), udråbstegn (!
), osv. fra slutningen af en streng.
Eksempel
Antag, at vi har en samling kaldet pets
med følgende dokument:
{ "_id" : 1, "name" : "Wag!!!", "type" : " Dog ", "weight" : 20 }
Vi kan se, at type
feltet inkluderer et mellemrum på begge sider af ordet Dog
. Vi kan bruge $rtrim
operatør for at returnere det felt med mellemrummet fjernet fra højre del af strengen.
Eksempel:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $rtrim: { input: "$type" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "Wag!!!", "type" : " Dog" }
Som forventet, type
felt er blevet returneret uden mellemrum i slutningen. Mellemrummet i begyndelsen er stadig tilbage.
Du kan også bruge $ltrim
operatør for at trimme den venstre del af strengen og $trim
operatør for at trimme begge sider af strengen.
Der er en del tegn, som MongoDB anser for at være mellemrumstegn. Se MongoDB Whitespace-tegn for en komplet liste.
Trim andre tegn
$rtrim
operatør accepterer en chars
parameter, der giver dig mulighed for at angive, hvilke tegn der skal trimmes.
Eksempel:
db.pets.aggregate([
{
$project: {
name: { $rtrim: { input: "$name", chars: "!" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "Wag" }
I dette tilfælde inkluderede vi chars
parameter med et udråbstegn (!
), hvilket resulterede i, at alle tre udråbstegn blev fjernet fra enden af strengen.
Trim flere tegn
Du kan trimme flere tegn ved at inkludere dem alle i chars
argument.
Eksempel:
db.pets.aggregate([
{
$project: {
name: { $rtrim: { input: "$name", chars: "!g" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "Wa" }
I dette tilfælde har jeg angivet to tegn som mine chars
argument, og to af disse tegn var tilfældigvis i slutningen af strengen. Derfor blev de to karakterer trimmet.
Vær dog forsigtig, når du gør dette. Her er, hvad der sker, når jeg inkluderer alle tegn:
db.pets.aggregate([
{
$project: {
name: { $rtrim: { input: "$name", chars: "!agW" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "" }
Hele strengen er forsvundet. Det har trimmet ikke kun !
og g
fra strengen, men den har også fjernet W
og a
tegn.
Trimning af tal
$rtrim
operatør arbejder på strenge. Hvis vi forsøger at trimme weight
felt, får vi en fejl. Dette skyldes, at weight
felt er et tal, ikke en streng.
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 : example@sqldat.com/mongo/shell/utils.js:25:13 example@sqldat.com/mongo/shell/assert.js:18:14 _assertCommandWexample@sqldat.com/mongo/shell/assert.js:618:17 example@sqldat.com/mongo/shell/assert.js:708:16 example@sqldat.com/mongo/shell/db.js:266:5 example@sqldat.com/mongo/shell/collection.js:1046:12 @(shell):1:1
Fejlen fortæller os, at vi har leveret en dobbelt, og at $rtrim
operatoren kræver, at dens input er en streng.
Hvis vi virkelig ville fjerne nullet, skulle vi først konvertere det til en streng. Vi kan gøre det med enten $convert
eller $toString
operatør.
Eksempel:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $rtrim: { input: { $toString: "$weight" }, chars: "0" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "Wag!!!", "weight" : "2" }
Vi kan få det tilbage til en fordobling ved at bruge enten $convert
eller $toDouble
operatør.
Fuldstændig eksempel:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $toDouble: { $rtrim: { input: { $toString: "$weight" }, chars: "0" } } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "Wag!!!", "weight" : 2 }