I MongoDB er $trim aggregeringspipeline-operatør fjerner mellemrum fra begyndelsen og slutningen 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 (- ) eller perioder (. ) eller alle s tegn osv.
Eksempel
Antag, at vi har en samling kaldet pets med følgende dokument:
{ "_id" : 1, "name" : "Wagg", "type" : " Dog ", "weight" : 20 }
Vi kan se, at type feltet inkluderer et mellemrum på begge sider af ordet Dog . Vi kan bruge $trim operatør for at returnere det felt med mellemrummet fjernet.
Eksempel:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $trim: { input: "$type" } }
}
}
]) Resultat:
{ "_id" : 1, "name" : "Wagg", "type" : "Dog" }
Som forventet, type felt er blevet returneret uden mellemrum.
Du kan også bruge $ltrim operatør for at trimme den venstre del af strengen og $rtrim operatør for at trimme højre side af strengen.
Der er faktisk en del tegn, som MongoDB anser for at være mellemrumstegn. Se MongoDB Whitespace-tegn for en komplet liste.
Trim andre tegn
$trim operatør accepterer en chars parameter, der giver dig mulighed for at angive, hvilke tegn der skal trimmes.
Eksempel:
db.pets.aggregate([
{
$project: {
name: { $trim: { input: "$name", chars: "g" } }
}
}
]) Resultat:
{ "_id" : 1, "name" : "Wa" }
Den har fjernet både g tegn fra slutningen af ordet.
Trim flere tegn
Du kan trimme flere tegn ved at inkludere dem alle i chars argument.
Eksempel:
db.pets.aggregate([
{
$project: {
name: { $trim: { input: "$name", chars: "Wgz" } }
}
}
]) Resultat:
{ "_id" : 1, "name" : "a" }
I dette tilfælde har jeg angivet tre tegn som mine chars argument, og to af disse tegn var tilfældigvis i hver ende af strengen. Derfor blev de to karakterer trimmet. Faktisk var tre tegn trimmet – en W og to g tegn.
Vær dog forsigtig, når du gør dette. Her er, hvad der sker, når jeg erstatter z med a i chars argument:
db.pets.aggregate([
{
$project: {
name: { $trim: { input: "$name", chars: "Wga" } }
}
}
]) Resultat:
{ "_id" : 1, "name" : "" }
Hele strengen er forsvundet. Det har trimmet ikke kun W og g fra hver ende af strengen, men den har også trimmet a fra snoren – selvom den var midt på snoren.
Trimning af tal
$trim 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: { $trim: { input: "$weight", chars: "0" } }
}
}
]) Resultat:
Error: command failed: {
"ok" : 0,
"errmsg" : "$trim 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
example@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, selvom $trim 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: { $trim: { input: { $toString: "$weight" }, chars: "0" } }
}
}
]) Resultat:
{ "_id" : 1, "name" : "Wagg", "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: { $trim: { input: { $toString: "$weight" }, chars: "0" } } }
}
}
]) Resultat:
{ "_id" : 1, "name" : "Wagg", "weight" : 2 }