MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

2 maneiras de substituir uma substring no MongoDB


O MongoDB 4.4 introduziu nove novos operadores de pipeline de agregação, incluindo dois novos operadores para localizar e substituir uma substring.

Os dois novos operadores que permitem localizar e substituir uma substring são o $replaceOne e $replaceAll operadores.

Veja o que cada operador faz:
Operador Descrição
$replaceOne Substitui a primeira instância de uma string de pesquisa em uma string de entrada por uma string de substituição.
$replaceAll Substitui todas as instâncias de uma string de pesquisa em uma string de entrada por uma string de substituição.

A única diferença entre esses operadores é que $replaceOne substitui o primeiro instância da substring, enquanto $replaceAll substitui todos instâncias da substring.

O $replaceOne Operador


Suponha que tenhamos uma coleção chamada products com o seguinte documento:
{
	"_id" : 1,
	"product" : "Left Handed Screwdriver with Left Handed Carry Case"
}

Podemos usar o $replaceOne operador para substituir a primeira instância da substring Left Handed com outra string:
db.products.aggregate([
   {
     $project:
      {
         product: { $replaceOne: { input: "$product", find: "Left Handed", replacement: "Ambidextrous" } }
      }
   }
]).pretty()

Resultado:
{
	"_id" : 1,
	"product" : "Ambidextrous Screwdriver with Left Handed Carry Case"
}

Observe que na verdade existem duas instâncias da substring (Left Handed ), mas apenas a primeira instância foi substituída.

O $replaceAll Operador


No exemplo anterior, substituímos a primeira instância da substring.

Agora vamos usar o $replaceAll operador para substituir todos instâncias da substring:
db.products.aggregate([
   {
     $project:
      {
         product: { $replaceAll: { input: "$product", find: "Left Handed", replacement: "Ambidextrous" } }
      }
   }
]).pretty()

Resultado:
{
	"_id" : 1,
	"product" : "Ambidextrous Screwdriver with Ambidextrous Carry Case"
}

Desta vez, ambas as instâncias da substring (Left Handed ) foram substituídos.