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

2 formas de reemplazar una subcadena en MongoDB

MongoDB 4.4 introdujo nueve nuevos operadores de canalización de agregación, incluidos dos nuevos operadores para buscar y reemplazar una subcadena.

Los dos nuevos operadores que le permiten buscar y reemplazar una subcadena son $replaceOne y $replaceAll operadores.

Esto es lo que hace cada operador:

Operador Descripción
$replaceOne Reemplaza la primera instancia de una cadena de búsqueda en una cadena de entrada con una cadena de reemplazo.
$replaceAll Reemplaza todas las instancias de una cadena de búsqueda en una cadena de entrada con una cadena de reemplazo.

La única diferencia entre estos operadores es que $replaceOne reemplaza al primero instancia de la subcadena, mientras que $replaceAll reemplaza a todos instancias de la subcadena.

El $replaceOne Operador

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

{
	"_id" : 1,
	"product" : "Left Handed Screwdriver with Left Handed Carry Case"
}

Podemos usar el $replaceOne operador para reemplazar la primera instancia de la subcadena Left Handed con otra cadena:

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceOne: { input: "$product", find: "Left Handed", replacement: "Ambidextrous" } }
      }
   }
]).pretty()

Resultado:

{
	"_id" : 1,
	"product" : "Ambidextrous Screwdriver with Left Handed Carry Case"
}

Observe que en realidad hay dos instancias de la subcadena (Left Handed ) pero solo se reemplazó la primera instancia.

El $replaceAll Operador

En el ejemplo anterior, reemplazamos la primera instancia de la subcadena.

Ahora usemos el $replaceAll operador para reemplazar todos instancias de la subcadena:

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceAll: { input: "$product", find: "Left Handed", replacement: "Ambidextrous" } }
      }
   }
]).pretty()

Resultado:

{
	"_id" : 1,
	"product" : "Ambidextrous Screwdriver with Ambidextrous Carry Case"
}

Esta vez ambas instancias de la subcadena (Left Handed ) fueron reemplazados.