In MongoDB, il $ltrim
l'operatore della pipeline di aggregazione rimuove gli spazi vuoti dall'inizio di una stringa. Questo include il carattere nullo.
Può anche rimuovere qualsiasi carattere specificato. Ad esempio, puoi usarlo per rimuovere tutti i trattini (-
) dall'inizio di una stringa.
Esempio
Supponiamo di avere una collezione chiamata pets
con il seguente documento:
{ "_id" : 1, "name" : "-Wag", "type" : " Dog ", "weight" : 20 }
Possiamo vedere che il type
il campo include uno spazio bianco su entrambi i lati della parola Dog
. Possiamo usare il $ltrim
operatore per restituire quel campo con lo spazio bianco rimosso dalla parte sinistra della stringa.
Esempio:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $ltrim: { input: "$type" } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "-Wag", "type" : "Dog " }
Come previsto, il type
il campo è stato restituito senza gli spazi bianchi all'inizio. Lo spazio bianco alla fine rimane ancora.
Puoi anche usare $rtrim
per tagliare la parte destra della stringa e il $trim
operatore per tagliare entrambi i lati della stringa.
Ci sono alcuni caratteri che MongoDB ritiene essere caratteri di spazi bianchi. Per un elenco completo, consulta i caratteri degli spazi bianchi di MongoDB.
Taglia altri personaggi
Il $ltrim
l'operatore accetta un chars
parametro che consente di specificare quali caratteri ritagliare.
Esempio:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "-" } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "Wag" }
In questo caso abbiamo incluso i chars
parametro con un trattino (-
), che ha comportato la rimozione del trattino dall'inizio della parola.
Taglia più caratteri
Puoi tagliare più caratteri includendoli tutti nei chars
argomento.
Esempio:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "W-" } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "ag" }
In questo caso, ho fornito due caratteri come chars
argomento e due di quei caratteri si trovavano all'inizio della stringa. Pertanto, quei due personaggi sono stati tagliati.
Tuttavia, fai attenzione quando lo fai. Ecco cosa succede quando includo tutti i caratteri:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "W-ag" } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "" }
L'intera stringa è scomparsa. Ha tagliato non solo il -
e W
dalla stringa, ma ha anche rimosso il a
e g
caratteri.
Numeri di rifilatura
Il $ltrim
l'operatore lavora sulle stringhe. Se proviamo a tagliare il weight
campo, otteniamo un errore. Questo perché il weight
il campo è un numero, non una stringa.
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $ltrim: { input: "$weight", chars: "2" } }
}
}
])
Risultato:
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
L'errore ci dice che abbiamo fornito un double e che il $ltrim
l'operatore richiede che l'input sia una stringa.
Se volessimo davvero rimuovere il 2, dovremmo prima convertirlo in una stringa. Possiamo farlo con $convert
o $toString
operatore.
Esempio:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "-Wag", "weight" : "0" }
Possiamo riportarlo a un doppio usando il $convert
o $toDouble
operatore.
Esempio completo:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $toDouble: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "-Wag", "weight" : 0 }