sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB $ltrim

En MongoDB, el $ltrim El operador de canalización de agregación elimina los espacios en blanco del principio 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 (- ) desde el principio de una cadena.

Ejemplo

Supongamos que tenemos una colección llamada pets con el siguiente documento:

{ "_id" : 1, "name" : "-Wag", "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 $ltrim operador para devolver ese campo con el espacio en blanco eliminado de la parte izquierda de la cadena.

Ejemplo:

db.pets.aggregate([
  { 
    $project: { 
      name: 1, 
      type: { $ltrim: { input: "$type" } } 
    } 
  }
])

Resultado:

{ "_id" : 1, "name" : "-Wag", "type" : "Dog   " }

Como era de esperar, el type El campo se ha devuelto sin el espacio en blanco al principio. El espacio en blanco al final aún permanece.

También puede usar el $rtrim operador para recortar la parte derecha de la cadena, y el $trim operador para recortar ambos lados de la cuerda.

Hay bastantes caracteres que MongoDB considera que son espacios en blanco. Consulte Caracteres de espacios en blanco de MongoDB para obtener una lista completa.

Recortar otros caracteres

El $ltrim el operador acepta un chars parámetro que le permite especificar qué caracteres recortar.

Ejemplo:

db.pets.aggregate([
  { 
    $project: {
      name: { $ltrim: { input: "$name", chars: "-" } } 
    } 
  }
])

Resultado:

{ "_id" : 1, "name" : "Wag" } 

En este caso incluimos los chars parámetro con un guión (- ), lo que resultó en la eliminación del guión del comienzo de la palabra.

Recortar varios caracteres

Puede recortar varios caracteres incluyéndolos todos en chars argumento.

Ejemplo:

db.pets.aggregate([
  { 
    $project: { 
      name: { $ltrim: { input: "$name", chars: "W-" } } 
    } 
  }
])

Resultado:

{ "_id" : 1, "name" : "ag" } 

En este caso, proporcioné dos caracteres como mis chars argumento, y dos de esos caracteres estaban al principio de la cadena. Por lo tanto, esos dos caracteres fueron recortados.

Sin embargo, tenga cuidado al hacer esto. Esto es lo que sucede cuando incluyo todos los caracteres:

db.pets.aggregate([
  { 
    $project: { 
      name: { $ltrim: { input: "$name", chars: "W-ag" } } 
    } 
  }
])

Resultado:

{ "_id" : 1, "name" : "" }

Toda la cadena ha desaparecido. Ha recortado no solo el - y W de la cadena, pero también ha eliminado el a y g personajes.

Recortar números

El $ltrim 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: { $ltrim: { input: "$weight", chars: "2" } } 
    } 
  }
])

Resultado:

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

El error nos dice que proporcionamos un doble y que el $ltrim operador requiere que su entrada sea una cadena.

Si realmente quisiéramos eliminar el 2, primero tendríamos que convertirlo en una cadena. Podemos hacer eso con $convert o $toString operador.

Ejemplo:

db.pets.aggregate([
  { 
    $project: { 
      name: 1, 
      weight: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } }
    }
  }
])

Resultado:

{ "_id" : 1, "name" : "-Wag", "weight" : "0" } 

Podemos volver a convertirlo en un doble usando el $convert o $toDouble operador.

Ejemplo completo:

db.pets.aggregate([
  { 
    $project: { 
      name: 1, 
      weight: { $toDouble: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } } }
    }
  }
])

Resultado:

{ "_id" : 1, "name" : "-Wag", "weight" : 0 }