I MongoDB, $trim aggregationspipeline-operatören tar bort blanksteg från början och 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 bindestreck (- ) eller perioder (. ) eller alla s tecken osv.
Exempel
Anta att vi har en samling som heter pets med följande dokument:
{ "_id" : 1, "name" : "Wagg", "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 $trim operatör för att returnera det fältet med blanktecken borttagen.
Exempel:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $trim: { input: "$type" } }
}
}
]) Resultat:
{ "_id" : 1, "name" : "Wagg", "type" : "Dog" }
Som förväntat, type fältet har returnerats utan blanksteg.
Du kan också använda $ltrim operatorn för att trimma den vänstra delen av strängen och $rtrim operatör för att trimma den högra sidan av strängen.
Det finns faktiskt en hel del tecken som MongoDB anser vara blanksteg. Se MongoDB Whitespace-tecken för en fullständig lista.
Trimma andra tecken
$trim operatören accepterar en chars parameter som låter dig specificera vilka tecken som ska trimmas.
Exempel:
db.pets.aggregate([
{
$project: {
name: { $trim: { input: "$name", chars: "g" } }
}
}
]) Resultat:
{ "_id" : 1, "name" : "Wa" }
Den har tagit bort både g tecken från slutet av ordet.
Trim flera tecken
Du kan trimma flera tecken genom att inkludera alla i chars argument.
Exempel:
db.pets.aggregate([
{
$project: {
name: { $trim: { input: "$name", chars: "Wgz" } }
}
}
]) Resultat:
{ "_id" : 1, "name" : "a" }
I det här fallet angav jag tre tecken som mina chars argument, och två av dessa tecken råkade vara i vardera änden av strängen. Därför trimmades dessa två karaktärer. Faktiskt trimmade tre tecken – en W och två g tecken.
Var dock försiktig när du gör detta. Här är vad som händer när jag byter ut z med a i chars argument:
db.pets.aggregate([
{
$project: {
name: { $trim: { input: "$name", chars: "Wga" } }
}
}
]) Resultat:
{ "_id" : 1, "name" : "" }
Hela strängen har försvunnit. Den har trimmat inte bara W och g från varje ände av strängen, men den har också trimmat a från snöret – trots att det var i mitten av snöret.
Trimningsnummer
$trim 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: { $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
Felet talar om för oss att vi tillhandahöll en dubbel, även om $trim 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: { $trim: { input: { $toString: "$weight" }, chars: "0" } }
}
}
]) Resultat:
{ "_id" : 1, "name" : "Wagg", "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: { $trim: { input: { $toString: "$weight" }, chars: "0" } } }
}
}
]) Resultat:
{ "_id" : 1, "name" : "Wagg", "weight" : 2 }