Docs Menu
Docs Home
/ /

$replaceAll (agregación)

$replaceAll

Reemplaza todas las instancias de una cadena de búsqueda en una cadena de entrada con una cadena de reemplazo.

$replaceAll distingue entre mayúsculas y minúsculas y distingue entre diacríticos e ignora cualquier intercalación presente en una colección.

El operador tiene lo $replaceAll siguiente Sintaxis de expresión del operador:

{ $replaceAll: { input: <expression>, find: <expression>, replacement: <expression> } }
Campo
Descripción

La cadena a la que desea aplicar la búsqueda.Puede ser cualquier expresión válida que se resuelva en una cadena o en null un. Si input hace referencia a un campo$replaceAll faltante,null devuelve.

La cadena que se busca en la entrada dada. Puede ser cualquier expresión válida que se resuelva en una cadena o en null un. Si find hace referencia a un campo$replaceAll faltante,null devuelve.

La string a utilizar para reemplazar todas las instancias coincidentes de buscar en entrada. Puede ser cualquier expresión válida que resuelva a un string o un null.

Las expresiones de entrada, búsqueda y reemplazo deben evaluarse como una cadena o un,null $replaceAll de lo contrario fallará con un error.

Si input o find se refieren a un campo que falta, devuelven null.

Si cualquiera de las opciones de entrada, búsqueda o reemplazo se evalúa null como, la $replaceAll expresión completa se evalúa null como:

Ejemplo
Resultado

{ $replaceAll: { input: null, find: "abc", replacement: "ABC" } }

null

{ $replaceAll: { input: "abc", find: null, replacement: "ABC" } }

null

{ $replaceAll: { input: "abc", find: "abc", replacement: null } }

null

La coincidencia de cadenas $replaceAll con expresiones siempre distingue entre mayúsculas y minúsculas y diacríticas. Cualquier intercalación configurada se ignora al realizar comparaciones de cadenas $replaceAll con.

Por ejemplo, cree una colección de muestra con un nivel de intercalación de 1:

db.createCollection( "restaurants", { collation: { locale: "fr", strength: 1 } } )

Un nivel de intercalación de 1 compara únicamente el carácter base e ignora otras diferencias, como mayúsculas y minúsculas y signos diacríticos.

A continuación, inserte documentos de ejemplo:

db.restaurants.insertMany( [
{ _id: 1, name: "cafe" },
{ _id: 2, name: "Cafe" },
{ _id: 3, name: "café" }
] )

La siguiente operación $replaceAll intenta encontrar y reemplazar todas las instancias de "Cafe" en el campo name:

db.restaurants.aggregate( [
{
$addFields:
{
resultObject: {
$replaceOne: {
input: "$name",
find: "Cafe",
replacement: "CAFE"
}
}
}
}
] )
{ "_id" : 1, "name" : "cafe", "resultObject" : "cafe" }
{ "_id" : 2, "name" : "Cafe", "resultObject" : "CAFE" }
{ "_id" : 3, "name" : "café", "resultObject" : "café" }

Debido a que ignora la intercalación configurada para esta colección, la operación solo coincide con la instancia de "Cafe" en $replaceAll el 2 documento:

{ _id: 1, name: "cafe", resultObject: "cafe" }
{ _id: 2, name: "Cafe", resultObject: "CAFE" }
{ _id: 3, name: "café", resultObject: "café" }

Los operadores que respetan $match la intercalación, como, coincidirían con los tres documentos al realizar una comparación de cadenas con "Cafe" debido a la fuerza de intercalación de esta colección 1 de.

La $replaceAll expresión de agregación no realiza ninguna normalización Unicode. Esto significa que la coincidencia de cadenas para todas las $replaceAll expresiones considerará el número de puntos de código utilizados para representar un carácter Unicode al intentar una coincidencia.

Por ejemplo, el carácter é se puede representar en Unicode utilizando uno o dos puntos de código:

Unicode
Se muestra como
Puntos de código

\xe9

é

1 ( \xe9 )

e\u0301

é

2 ( e + \u0301 )

El $replaceAll uso de con una cadena de búsqueda donde el carácter é está representado en Unicode con un punto de código no coincidirá con ninguna instancia de é que use dos puntos de código en la cadena de entrada.

La siguiente tabla muestra si se produce una coincidencia para la cadena de búsqueda "café" al compararla con cadenas de entrada donde é se representa con uno o dos puntos de código. La cadena de búsqueda de este ejemplo utiliza un punto de código para representar el é carácter:

Ejemplo
Match

{ $replaceAll: { input: "caf\xe9", find: "café", replacement: "CAFE" } }

{ $replaceAll: { input: "cafe\u0301", find: "café", replacement: "CAFE" } }

no

Debido a que no realiza ninguna normalización Unicode, solo coincide $replaceAll la primera comparación de cadenas, donde tanto la cadena de búsqueda como la de entrada utilizan un punto de código para é representar.

Crea una colección inventory con los siguientes documentos:

db.inventory.insertMany( [
{ _id: 1, item: "blue paint" },
{ _id: 2, item: "blue and green paint" },
{ _id: 3, item: "blue paint with blue paintbrush" },
{ _id: 4, item: "blue paint with green paintbrush" },
] )

El siguiente ejemplo reemplaza cada instancia de "pintura azul" en el campo item con "pintura roja":

db.inventory.aggregate([
{
$project:
{
item: { $replaceAll: { input: "$item", find: "blue paint", replacement: "red paint" } }
}
}
])

La operación devuelve los siguientes resultados:

{ _id: 1, item: "red paint" }
{ _id: 2, item: "blue and green paint" }
{ _id: 3, item: "red paint with red paintbrush" }
{ _id: 4, item: "red paint with green paintbrush" }

Volver

$replaceOne

En esta página