Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

$replaceAll (operador de expresión)

$replaceAll

Reemplaza todas las instancias de una string de búsqueda en una string de entrada por una string de reemplazo.

$replaceAll es tanto sensible a mayúsculas como a diacríticos, e ignora cualquier intercalación presente en una colección.

El operador $replaceAll tiene la siguiente sintaxis de expresión de operador:

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

El string en el que desea aplicar la búsqueda. Puede ser cualquier expresión válida que se resuelva como string o null. Si input se refiere a un campo que falta, $replaceAll devuelve null.

La string que se buscará dentro de la entrada dada. Puede ser cualquier expresión válida que se resuelva como string o null. Si find se refiere a un campo que falta, $replaceAll devuelve null.

La string a usar para reemplazar todas las instancias emparejadas de find en input. Puede ser cualquier expresión válida que se resuelva en un string o un null.

Las expresiones de entrada, buscar y reemplazo deben evaluarse como una string o un null, o $replaceAll fallará con un error.

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

Si cualquiera de entrada, buscar, o reemplazo se evalúa como un null, toda la expresión $replaceAll se evalúa como null:

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 comparación de string para las expresiones $replaceAll siempre distingue entre mayúsculas y minúsculas y es sensible a los diacríticos. Cualquier intercalación configurada se ignora al realizar comparaciones de string con $replaceAll.

Por ejemplo, crea una colección de muestra con una fortaleza de intercalación 1:

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

Una fuerza de intercalación de 1 compara solo el carácter base e ignora otras diferencias como el uso de mayúsculas y diacríticos.

A continuación, inserta documentos de ejemplo:

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

La siguiente operación de $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 $replaceAll ignora la intercalación configurada para esta colección, la operación solo empareja la instancia de "Cafe" en el documento 2:

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

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

La expresión de agregación $replaceAll no realiza ninguna normalización Unicode. Esto significa que la coincidencia de string para todas las expresiones $replaceAll considerará la cantidad de puntos de código utilizados para representar un carácter en unicode cuando se intente una coincidencia.

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

Unicode
Se muestra como
Puntos de código

\xe9

é

1 ( \xe9 )

e\u0301

é

2 ( e + \u0301 )

Usar $replaceAll con una string de find donde el carácter é se representa en Unicode con un punto de código no coincidirá con ninguna instancia de é que utilice dos puntos de código en la string input.

La siguiente tabla muestra si se produce una coincidencia al buscar la string de "café" cuando se compara con input strings dónde é está representado por uno o dos puntos de código. En este ejemplo, la string de búsqueda utiliza un punto de código para representar el carácter é:

Ejemplo
coincidencia

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

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

no

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

Crea una colección de 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 por «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" }