I MongoDB er $ltrim
aggregeringspipeline-operator fjerner mellemrum fra begyndelsen af en streng. Dette inkluderer null-tegnet.
Det kan også fjerne ethvert angivet tegn. For eksempel kan du bruge det til at fjerne alle bindestreg (-
) fra begyndelsen 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 $ltrim
operatør for at returnere det felt med mellemrummet fjernet fra venstre del af strengen.
Eksempel:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $ltrim: { input: "$type" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "-Wag", "type" : "Dog " }
Som forventet, type
felt er blevet returneret uden mellemrum i begyndelsen. Mellemrummet i slutningen er stadig tilbage.
Du kan også bruge $rtrim
operatoren for at trimme den højre 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
$ltrim
operatør accepterer en chars
parameter, der giver dig mulighed for at angive, hvilke tegn der skal trimmes.
Eksempel:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "-" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "Wag" }
I dette tilfælde inkluderede vi chars
parameter med en bindestreg (-
), hvilket resulterede i, at bindestregen blev fjernet fra begyndelsen af ordet.
Trim flere tegn
Du kan trimme flere tegn ved at inkludere dem alle i chars
argument.
Eksempel:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "W-" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "ag" }
I dette tilfælde har jeg angivet to tegn som mine chars
argument, og to af disse tegn var tilfældigvis i starten 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: { $ltrim: { input: "$name", chars: "W-ag" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "" }
Hele strengen er forsvundet. Det har trimmet ikke kun -
og W
fra strengen, men den har også fjernet a
og g
tegn.
Trimning af tal
$ltrim
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: { $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
Fejlen fortæller os, at vi har leveret en dobbelt, og at $ltrim
operatoren kræver, at dens input er en streng.
Hvis vi virkelig ville fjerne de 2, skulle vi først konvertere den til en streng. Vi kan gøre det enten med $convert
eller $toString
operatør.
Eksempel:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "-Wag", "weight" : "0" }
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: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } } }
}
}
])
Resultat:
{ "_id" : 1, "name" : "-Wag", "weight" : 0 }