MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

2 façons de remplacer une sous-chaîne dans MongoDB

MongoDB 4.4 a introduit neuf nouveaux opérateurs de pipeline d'agrégation, dont deux nouveaux opérateurs pour rechercher et remplacer une sous-chaîne.

Les deux nouveaux opérateurs qui permettent de rechercher et de remplacer une sous-chaîne sont le $replaceOne et $replaceAll opérateurs.

Voici ce que fait chaque opérateur :

Opérateur Description
$replaceOne Remplace la première instance d'une chaîne de recherche dans une chaîne d'entrée par une chaîne de remplacement.
$replaceAll Remplace toutes les instances d'une chaîne de recherche dans une chaîne d'entrée par une chaîne de remplacement.

La seule différence entre ces opérateurs est que $replaceOne remplace le premier instance de la sous-chaîne, alors que $replaceAll remplace tous instances de la sous-chaîne.

Le $replaceOne Opérateur

Supposons que nous ayons une collection appelée products avec le document suivant :

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

Nous pouvons utiliser le $replaceOne opérateur pour remplacer la première instance de la sous-chaîne Left Handed avec une autre chaîne :

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

Résultat :

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

Notez qu'il existe en fait deux instances de la sous-chaîne (Left Handed ) mais seule la première instance a été remplacée.

Le $replaceAll Opérateur

Dans l'exemple précédent, nous avons remplacé la première instance de la sous-chaîne.

Utilisons maintenant le $replaceAll opérateur pour remplacer tous instances de la sous-chaîne :

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

Résultat :

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

Cette fois, les deux instances de la sous-chaîne (Left Handed ) ont été remplacés.