In MongoDB, de $ltrim
aggregatiepijplijnoperator verwijdert witruimte aan het begin van een tekenreeks. Dit omvat het null-teken.
Het kan ook elk opgegeven teken verwijderen. U kunt het bijvoorbeeld gebruiken om alle koppeltekens te verwijderen (-
) vanaf het begin van een string.
Voorbeeld
Stel dat we een verzameling hebben met de naam pets
met het volgende document:
{ "_id" : 1, "name" : "-Wag", "type" : " Dog ", "weight" : 20 }
We kunnen zien dat het type
veld bevat witruimte aan beide zijden van het woord Dog
. We kunnen de $ltrim
. gebruiken operator om dat veld te retourneren met de witruimte verwijderd uit het linkergedeelte van de tekenreeks.
Voorbeeld:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $ltrim: { input: "$type" } }
}
}
])
Resultaat:
{ "_id" : 1, "name" : "-Wag", "type" : "Dog " }
Zoals verwacht, het type
veld is geretourneerd zonder de witruimte aan het begin. De witruimte aan het einde blijft bestaan.
U kunt ook de $rtrim
. gebruiken operator om het rechterdeel van de tekenreeks bij te snijden, en de $trim
operator om beide zijden van de string in te korten.
Er zijn nogal wat tekens die MongoDB beschouwt als witruimtetekens. Zie MongoDB-witruimtetekens voor een volledige lijst.
Andere tekens bijsnijden
De $ltrim
operator accepteert een chars
parameter waarmee u kunt specificeren welke tekens moeten worden bijgesneden.
Voorbeeld:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "-" } }
}
}
])
Resultaat:
{ "_id" : 1, "name" : "Wag" }
In dit geval hebben we de chars
parameter met een koppelteken (-
), waardoor het koppelteken aan het begin van het woord werd verwijderd.
Meerdere tekens inkorten
U kunt meerdere tekens inkorten door ze allemaal op te nemen in de chars
argument.
Voorbeeld:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "W-" } }
}
}
])
Resultaat:
{ "_id" : 1, "name" : "ag" }
In dit geval heb ik twee tekens opgegeven als mijn chars
argument, en twee van die tekens stonden toevallig aan het begin van de tekenreeks. Daarom werden die twee karakters bijgesneden.
Wees echter voorzichtig wanneer u dit doet. Dit is wat er gebeurt als ik alle tekens toevoeg:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "W-ag" } }
}
}
])
Resultaat:
{ "_id" : 1, "name" : "" }
De hele reeks is verdwenen. Het heeft niet alleen de -
. bijgesneden en W
uit de string, maar het heeft ook de a
. verwijderd en g
tekens.
Getallen bijsnijden
De $ltrim
operator werkt op strings. Als we proberen het weight
te verminderen veld, krijgen we een foutmelding. Dit komt omdat het weight
veld is een getal, geen tekenreeks.
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $ltrim: { input: "$weight", chars: "2" } }
}
}
])
Resultaat:
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
De fout vertelt ons dat we een dubbele hebben gegeven en dat de $ltrim
operator vereist dat de invoer een tekenreeks is.
Als we de 2 echt willen verwijderen, moeten we deze eerst naar een string converteren. We kunnen dat doen met de $convert
of $toString
telefoniste.
Voorbeeld:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } }
}
}
])
Resultaat:
{ "_id" : 1, "name" : "-Wag", "weight" : "0" }
We kunnen het terug naar een dubbel krijgen door ofwel de $convert
. te gebruiken of $toDouble
telefoniste.
Volledig voorbeeld:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $toDouble: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } } }
}
}
])
Resultaat:
{ "_id" : 1, "name" : "-Wag", "weight" : 0 }