Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

$replaceAll (operador de expressão )

$replaceAll

Substitui todas as instâncias de uma string de pesquisa em uma string de entrada por uma string de substituição.

$replaceAll diferencia maiúsculas de minúsculas e diacríticos e ignora qualquer agrupamento presente em uma collection.

O operador $replaceAll tem a seguinte sintaxe de expressão de operador :

{ $replaceAll: { input: <expression>, find: <expression>, replacement: <expression> } }
Campo
Descrição

A string na qual você deseja aplicar a localização.Pode ser qualquer expressão válida que resolva para uma string ou null. Se input se referir a um campo ausente, $replaceAll retornará null.

A string a procurar na entrada fornecida. Pode ser qualquer expressão válida que resolva para uma string ou null. Se find se referir a um campo ausente, $replaceAll retornará null.

A string a usar para substituir todas as instâncias correspondentes de localização na entrada.Pode ser qualquer expressão válida que resolva para uma string ou null.

As expressões de entrada, localização e substituição devem avaliar para uma string ou um null, ou $replaceAll falha com um erro.

Se entrada ou localização se referirem a um campo ausente, elas retornarão null.

Se qualquer um de entrada, localização ou substituição for avaliado como null, a expressão $replaceAll inteira será avaliada como null:

Exemplo
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

a correspondência de strings para expressões $replaceAll sempre faz distinção entre maiúsculas e minúsculas e diacríticos. Qualquer agrupamento configurado é ignorado ao realizar comparações de strings com $replaceAll.

Por exemplo, crie uma collection de amostras com força de agrupamento 1:

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

A força de um agrupamento de 1 compara apenas o caractere base e ignora outras diferenças, como letras maiúsculas, letras minúsculas e diacríticos.

Em seguida, insira documentos de exemplo :

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

A seguinte operação do $replaceAll tenta localizar e substituir todas as instâncias do "Cafe" no 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é" }

Como $replaceAll ignora o agrupamento configurado para essa collection, a operação corresponde apenas à instância de "Cafe" no documento 2:

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

Os operadores que respeitam o agrupamento, como $match, corresponderiam a todos os três documentos ao realizar uma comparação de strings de "Cafe" devido à força de agrupamento dessa collection de 1.

A expressão de agregação $replaceAll não executa nenhuma normalização unicode. Isso significa que a correspondência de strings de todas as expressões $replaceAll considerará o número de pontos de código usados para representar um caractere em unicode ao tentar uma correspondência.

Por exemplo, o caractere é pode ser representado em unicode usando um ou dois pontos de código:

Unicode
Aparece como
Pontos de código

\xe9

é

1 ( \xe9 )

e\u0301

é

2 ( e + \u0301 )

Usar $replaceAll com uma string localização em que o caractere é é representado em unicode com um ponto de código não corresponderá a nenhuma instância de é que use dois pontos de código na string de entrada.

A tabela a seguir mostra se ocorre uma correspondência para uma string localização de "café" quando comparado a strings de entrada em que é é representado por um ou dois ponto de código. A string localização nesse exemplo usa um ponto de código para representar o caractere é:

Exemplo
corresponder

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

sim

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

no

Como $replaceAll não executa nenhuma normalização unicode, somente a primeira comparação de strings corresponde, em que as strings de localização e entrada usam um ponto de código para representar é.

Cria uma collection inventory com os seguintes 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" },
] )

O exemplo a seguir substitui cada instância de "tinta azul" no campo item por "tinta vermelha":

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

A operação retorna os seguintes 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" }