Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Docs Menu
Docs Home
/ /

$replaceOne (operador de expresión)

$replaceOne

Reemplaza la primera instancia de una string de búsqueda en un texto de entrada con una string de reemplazo.

Si no se encuentra ninguna ocurrencia, $replaceOne se evalúa en la string.

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

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

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

La string en la que deseas aplicar la acción de buscar. Puede ser cualquier expresión válida que resuelva en una string o un null. Si input se refiere a un campo que falta, $replaceOne devuelve null.

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

La cadena que se usará para reemplazar la primera coincidencia 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 buscar en input, $replaceOne se evalúa como la string de input.

Las expresiones de entrada, búsqueda y reemplazo deben evaluarse como una cadena o un,null $replaceOne 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 $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, cree una colección de muestra con un nivel de intercalación de 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, inserte 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 "Cafe" 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 "Cafe" 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 coincidencia de cadenas para todas las $replaceOne 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 é 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 $replaceOne 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 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
coincidencia

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

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

no

Debido a que $replaceOne 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 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, solo se reemplaza la primera instancia coincidente de "pintura azul".

Volver

$regexMatch

En esta página