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 ou padrão regex em uma string de input 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 $replaceAll operador 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 null ou. Se input se referir a um campo$replaceAll ausente,null retornará.

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

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 null ou.

As expressões de entrada, localização e substituição devem ser avaliadas como uma string ou um null (ou regex para localizar), ou falha com um $replaceAll erro.

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

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

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 ignora o agrupamento configurado para essa collection, a operação só corresponde à instância de "Cafe"$replaceAll no 2 documento:

{ _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 $replaceAll expressão de agregação não executa nenhuma normalização unicode. Isso significa que a correspondência de strings de todas as $replaceAll expressões 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 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 não executa nenhuma normalização unicode,$replaceAll somente a primeira comparação de strings corresponde, onde 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" }

O exemplo a seguir usa um padrão regex \\bblue paint\\b para substituir cada instância correspondente a "blue paint" como uma frase inteira no campo item por "red paint":

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

Nesse caso, "tinta azul" é substituído somente quando aparece como uma frase inteira, devido ao uso de limites de palavras regex (\b), e não quando é uma substring dentro de uma palavra maior.