In MongoDB, il $trim
l'operatore della pipeline di aggregazione rimuove gli spazi vuoti dall'inizio e dalla fine di una stringa. Questo include il carattere nullo.
Può anche rimuovere qualsiasi carattere specificato. Ad esempio, puoi usarlo per rimuovere tutti i trattini (-
) o punti (.
) o tutti i s
caratteri, ecc.
Esempio
Supponiamo di avere una collezione chiamata pets
con il seguente documento:
{ "_id" : 1, "name" : "Wagg", "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 $trim
operatore per restituire quel campo con lo spazio vuoto.
Esempio:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $trim: { input: "$type" } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "Wagg", "type" : "Dog" }
Come previsto, il type
il campo è stato restituito senza spazi bianchi.
Puoi anche usare il $ltrim
per tagliare la parte sinistra della stringa e il $rtrim
operatore per tagliare il lato destro della stringa.
In realtà 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 $trim
l'operatore accetta un chars
parametro che consente di specificare quali caratteri ritagliare.
Esempio:
db.pets.aggregate([
{
$project: {
name: { $trim: { input: "$name", chars: "g" } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "Wa" }
Ha rimosso entrambi g
caratteri dalla fine della parola.
Taglia più caratteri
Puoi tagliare più caratteri includendoli tutti nei chars
argomento.
Esempio:
db.pets.aggregate([
{
$project: {
name: { $trim: { input: "$name", chars: "Wgz" } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "a" }
In questo caso, ho fornito tre caratteri come chars
argomento e due di quei caratteri si trovavano alle due estremità della stringa. Pertanto, quei due personaggi sono stati tagliati. In realtà, tre caratteri sono stati tagliati:uno W
e due g
caratteri.
Tuttavia, fai attenzione quando lo fai. Ecco cosa succede quando sostituisco z
con a
nei chars
argomento:
db.pets.aggregate([
{
$project: {
name: { $trim: { input: "$name", chars: "Wga" } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "" }
L'intera stringa è scomparsa. Ha tagliato non solo il W
e g
da ciascuna estremità della stringa, ma ha anche tagliato il a
dalla corda, anche se era nel mezzo della corda.
Numeri di rifilatura
Il $trim
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: { $trim: { input: "$weight", chars: "0" } }
}
}
])
Risultato:
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 : [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, anche se $trim
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: { $trim: { input: { $toString: "$weight" }, chars: "0" } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "Wagg", "weight" : "2" }
Possiamo riportarlo a un doppio usando il $convert
o $toDouble
operatore.
Esempio completo:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $toDouble: { $trim: { input: { $toString: "$weight" }, chars: "0" } } }
}
}
])
Risultato:
{ "_id" : 1, "name" : "Wagg", "weight" : 2 }