En MongoDB, el $trim
El operador de canalización de agregación elimina los espacios en blanco al principio y al final de una cadena. Esto incluye el carácter nulo.
También puede eliminar cualquier carácter especificado. Por ejemplo, podría usarlo para eliminar todos los guiones (-
) o puntos (.
) o todos los s
personajes, etc.
Ejemplo
Supongamos que tenemos una colección llamada pets
con el siguiente documento:
{ "_id" : 1, "name" : "Wagg", "type" : " Dog ", "weight" : 20 }
Podemos ver que el type
el campo incluye espacios en blanco a ambos lados de la palabra Dog
. Podemos usar el $trim
operador para devolver ese campo con el espacio en blanco eliminado.
Ejemplo:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $trim: { input: "$type" } }
}
}
])
Resultado:
{ "_id" : 1, "name" : "Wagg", "type" : "Dog" }
Como era de esperar, el type
el campo se ha devuelto sin el espacio en blanco.
También puede usar el $ltrim
operador para recortar la parte izquierda de la cadena, y el $rtrim
operador para recortar el lado derecho de la cuerda.
En realidad, hay bastantes caracteres que MongoDB considera espacios en blanco. Consulte Caracteres de espacios en blanco de MongoDB para obtener una lista completa.
Recortar otros caracteres
El $trim
el operador acepta un chars
parámetro que le permite especificar qué caracteres recortar.
Ejemplo:
db.pets.aggregate([
{
$project: {
name: { $trim: { input: "$name", chars: "g" } }
}
}
])
Resultado:
{ "_id" : 1, "name" : "Wa" }
Ha eliminado tanto g
caracteres desde el final de la palabra.
Recortar varios caracteres
Puede recortar varios caracteres incluyéndolos todos en chars
argumento.
Ejemplo:
db.pets.aggregate([
{
$project: {
name: { $trim: { input: "$name", chars: "Wgz" } }
}
}
])
Resultado:
{ "_id" : 1, "name" : "a" }
En este caso, proporcioné tres caracteres como mis chars
argumento, y dos de esos caracteres estaban en cualquier extremo de la cadena. Por lo tanto, esos dos caracteres fueron recortados. En realidad, se recortaron tres caracteres:uno W
y dos g
personajes.
Sin embargo, tenga cuidado al hacer esto. Esto es lo que sucede cuando reemplazo z
con a
en los chars
argumento:
db.pets.aggregate([
{
$project: {
name: { $trim: { input: "$name", chars: "Wga" } }
}
}
])
Resultado:
{ "_id" : 1, "name" : "" }
Toda la cadena ha desaparecido. Ha recortado no solo la W
y g
de cada extremo de la cadena, pero también ha recortado el a
de la cuerda, aunque estaba en el medio de la cuerda.
Recortar números
El $trim
operador trabaja en cadenas. Si intentamos recortar el weight
campo, obtenemos un error. Esto se debe a que el weight
el campo es un número, no una cadena.
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $trim: { input: "$weight", chars: "0" } }
}
}
])
Resultado:
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
El error nos dice que proporcionamos un doble, aunque el $trim
operador requiere que su entrada sea una cadena.
Si realmente quisiéramos eliminar el cero, primero tendríamos que convertirlo en una cadena. Podemos hacer eso con $convert
o $toString
operador.
Ejemplo:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $trim: { input: { $toString: "$weight" }, chars: "0" } }
}
}
])
Resultado:
{ "_id" : 1, "name" : "Wagg", "weight" : "2" }
Podemos volver a convertirlo en un doble usando el $convert
o $toDouble
operador.
Ejemplo completo:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $toDouble: { $trim: { input: { $toString: "$weight" }, chars: "0" } } }
}
}
])
Resultado:
{ "_id" : 1, "name" : "Wagg", "weight" : 2 }