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

$replaceOne (operador de expresión)

$replaceOne

Reemplaza la primera instancia de una cadena de búsqueda o patrón regex en una string de input con una cadena de reemplazo.

Si no se encuentra ninguna ocurrencia, se evalúa a la cadena de$replaceOne entrada.

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

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

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

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

La cadena que se buscará dentro de la entrada proporcionada. Puede ser cualquier expresión válida que se resuelva en una cadena, una expresión regular null o. Si find se refiere a un campo$replaceOne faltante,null devuelve.

La cadena que se utilizará para reemplazar la primera instancia coincidente de find en la entrada. Puede ser cualquier expresión válida que se resuelva en una cadena o en null un.

Si no se encuentran ocurrencias de find en la entrada, se$replaceOne evalúa a la cadena de entrada.

Las expresiones de entrada, búsqueda y reemplazo deben evaluarse en uno de los siguientes tipos de salida:

De lo contrario, falla con un$replaceOne error.

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

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

Ejemplo
Resultado

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

null

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

null

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

null

La comparación de string para las expresiones $replaceOne 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 $replaceOne.

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 intenta encontrar y reemplazar la primera instancia de "Café" en $replaceOne el name campo:

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 "Café" en $replaceOne el 2 documento.

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 $replaceOne expresión de agregación no realiza ninguna normalización Unicode. Esto significa que la comparación de cadenas para todas las $replaceOne expresiones tendrá en cuenta el número de puntos de código utilizados para representar un carácter en Unicode al intentar 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 )

El $replaceOne 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 utilice 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 é está representado por uno o dos puntos de código. La cadena de búsqueda en este ejemplo utiliza un punto de código para representar el é carácter:

Ejemplo
coincidencia

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

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

no

Debido a que no realiza ninguna normalización Unicode, solo la $replaceOne primera comparación de cadenas coincide, donde tanto la cadena de búsqueda como la de entrada usan un 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 la primera instancia de "pintura azul" en el campo item por "pintura roja":

db.inventory.aggregate([
{
$project:
{
item: { $replaceOne: { 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 blue paintbrush" }
{ _id: 4, item: "red paint with green paintbrush" }

Tenga en cuenta que con el documento 3, sólo se reemplaza la primera instancia coincidente de "pintura azul".

El siguiente ejemplo reemplaza la primera instancia de "blue" como una palabra completa en el campo item por "navy":

db.inventory.aggregate([
{
$project:
{
item: { $replaceOne: { input: "$item", find: \\bblue\\b, replacement: "navy" } }
}
}
]);

La operación devuelve los siguientes resultados:

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

Ten en cuenta que con el document 3, solo se reemplaza la primera instancia coincidente de "azul".