MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

2 modi per sostituire una sottostringa in MongoDB

MongoDB 4.4 ha introdotto nove nuovi operatori di pipeline di aggregazione, inclusi due nuovi operatori per trovare e sostituire una sottostringa.

I due nuovi operatori che consentono di trovare e sostituire una sottostringa sono $replaceOne e $replaceAll operatori.

Ecco cosa fa ogni operatore:

Operatore Descrizione
$replaceOne Sostituisce la prima istanza di una stringa di ricerca in una stringa di input con una stringa di sostituzione.
$replaceAll Sostituisce tutte le istanze di una stringa di ricerca in una stringa di input con una stringa di sostituzione.

L'unica differenza tra questi operatori è che $replaceOne sostituisce il primo istanza della sottostringa, mentre $replaceAll sostituisce tutti istanze della sottostringa.

Il $replaceOne Operatore

Supponiamo di avere una collezione chiamata products con il seguente documento:

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

Possiamo usare il $replaceOne per sostituire la prima istanza della sottostringa Left Handed con un'altra stringa:

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceOne: { input: "$product", find: "Left Handed", replacement: "Ambidextrous" } }
      }
   }
]).pretty()

Risultato:

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

Nota che in realtà ci sono due istanze della sottostringa (Left Handed ) ma solo la prima istanza è stata sostituita.

Il $replaceAll Operatore

Nell'esempio precedente, abbiamo sostituito la prima istanza della sottostringa.

Ora usiamo il $replaceAll operatore per sostituire tutti istanze della sottostringa:

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceAll: { input: "$product", find: "Left Handed", replacement: "Ambidextrous" } }
      }
   }
]).pretty()

Risultato:

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

Questa volta entrambe le istanze della sottostringa (Left Handed ) sono stati sostituiti.