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 }