2 Ways to Replace a Substring in MongoDB

MongoDB 4.4 introduced nine new aggregation pipeline operators, including two new operators for finding and replacing a substring.

The two new operators that allow you to find and replace a substring are the $replaceOne and $replaceAll operators.

Here’s what each operator does:

OperatorDescription
$replaceOneReplaces the first instance of a search string in an input string with a replacement string.
$replaceAllReplaces all instances of a search string in an input string with a replacement string.

The only difference between these operators is that $replaceOne replaces the first instance of the substring, whereas $replaceAll replaces all instances of the substring.

The $replaceOne Operator

Suppose we have a collection called products with the following document:

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

We can use the $replaceOne operator to replace the first instance of the substring Left Handed with another string:

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

Result:

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

Notice that there are actually two instances of the substring (Left Handed) but only the first instance was replaced.

The $replaceAll Operator

In the previous example, we replaced the first instance of the substring.

Now let’s use the $replaceAll operator to replace all instances of the substring:

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

Result:

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

This time both instances of the substring (Left Handed) were replaced.