In MongoDB, il $rtrim
l'operatore della pipeline di aggregazione rimuove gli spazi vuoti dalla fine di una stringa. Questo include il carattere nullo.
Può anche rimuovere qualsiasi carattere specificato. Ad esempio, puoi usarlo per rimuovere tutti i punti (.
), punti esclamativi (!
), ecc. dalla fine 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 $rtrim
operatore per restituire quel campo con lo spazio bianco rimosso dalla parte destra della stringa.
Esempio:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $rtrim: { input: "$type" } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "Wag!!!", "type" : " Dog" }
Come previsto, il type
il campo è stato restituito senza lo spazio bianco alla fine. Lo spazio bianco all'inizio rimane ancora.
Puoi anche usare il $ltrim
per tagliare la parte sinistra 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 $rtrim
l'operatore accetta un chars
parametro che consente di specificare quali caratteri ritagliare.
Esempio:
db.pets.aggregate([
{
$project: {
name: { $rtrim: { input: "$name", chars: "!" } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "Wag" }
In questo caso abbiamo incluso i chars
parametro con un punto esclamativo (!
), che ha comportato la rimozione di tutti e tre i punti esclamativi dalla fine della stringa.
Taglia più caratteri
Puoi tagliare più caratteri includendoli tutti nei chars
argomento.
Esempio:
db.pets.aggregate([
{
$project: {
name: { $rtrim: { input: "$name", chars: "!g" } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "Wa" }
In questo caso, ho fornito due caratteri come chars
argomento e due di quei caratteri si trovavano alla fine 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: { $rtrim: { input: "$name", chars: "!agW" } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "" }
L'intera stringa è scomparsa. Ha tagliato non solo il !
e g
dalla stringa, ma ha anche rimosso la W
e a
caratteri.
Numeri di rifilatura
Il $rtrim
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: { $rtrim: { input: "$weight", chars: "0" } }
}
}
])
Risultato:
Error: command failed: { "ok" : 0, "errmsg" : "$rtrim 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 $rtrim
l'operatore richiede che l'input sia una stringa.
Se volessimo davvero rimuovere lo zero, dovremmo prima convertirlo in una stringa. Possiamo farlo con $convert
o $toString
operatore.
Esempio:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $rtrim: { input: { $toString: "$weight" }, chars: "0" } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "Wag!!!", "weight" : "2" }
Possiamo riportarlo a un doppio usando il $convert
o $toDouble
operatore.
Esempio completo:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $toDouble: { $rtrim: { input: { $toString: "$weight" }, chars: "0" } } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "Wag!!!", "weight" : 2 }