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

$replaceOne (operador de expressão )

$replaceOne

Substitui a primeira instância de uma string de pesquisa ou padrão regex em uma string de input por uma string de substituição.

Se nenhuma ocorrência for localizada, avaliará para a string de$replaceOne entrada.

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

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

{ $replaceOne: { 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$replaceOne 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$replaceOne ausente,null retornará.

A string a utilizar para substituir a primeira instância correspondente de localizar na entrada. Pode ser qualquer expressão válida que resolva para uma string null ou.

Se nenhuma ocorrência de localizar for encontrada na entrada, será avaliado como a string$replaceOne de entrada.

As expressões de entrada, localização e substituição devem avaliar para um dos seguintes tipos de saída:

  • Um string

  • null

  • Um regex para operações de localização

Caso contrário, falha com um$replaceOne 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á $replaceOne avaliada null como:

Exemplo
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

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

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 operação a seguir $replaceOne tenta localizar e substituir a primeira instância de "Cafe" no 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é" }

Como ignora o agrupamento configurado para essa collection, a operação só corresponde à instância de "Cafe"$replaceOne no 2 documento.

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 $replaceOne expressão de agregação não executa nenhuma normalização unicode. Isso significa que a correspondência de strings de todas as $replaceOne 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 $replaceOne 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

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

sim

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

no

Como não executa nenhuma normalização unicode,$replaceOne 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 a primeira instância de "blue paint" no campo item por "red paint":

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

Observe que, com o documento 3, somente a primeira instância correspondente de "blue print" é substituída.

O exemplo a seguir substitui a primeira instância de "blue" como uma palavra inteira no campo item por "navy":

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

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

Observe que, com o document 3, somente a primeira instância correspondente de "blue" é substituída.