[SERVER-44326] Add $replaceAll expression Created: 30/Oct/19  Updated: 25/Nov/19  Resolved: 25/Nov/19

Status: Closed
Project: Core Server
Component/s: Aggregation Framework
Affects Version/s: None
Fix Version/s: None

Type: New Feature Priority: Major - P3
Reporter: Charlie Swanson Assignee: David Percy
Resolution: Duplicate Votes: 0
Labels: expression, neweng, pm1457
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Depends
Documented
is documented by DOCS-13182 Investigate changes in SERVER-44326: ... Closed
Duplicate
duplicates SERVER-32314 Add $replaceOne and $replaceAll expre... Closed
Related
is related to SERVER-32314 Add $replaceOne and $replaceAll expre... Closed
Sprint: Query 2019-12-02
Participants:

 Description   

The query team has discussed and agreed on the following syntax:

Name $replaceAll

Rejected alternate names: $stringReplace, $substringReplace, $replaceSubstring, $stringReplaceAll

It takes in three expressions that must evaluate to strings: an original string, a string to search for, and a string to insert. This would evaluate to a new string with all occurrences of `find` in `input` replaced by `replacement`. Expressions in each argument would first be evaluated and an error thrown if any input evaluates to a non-string, non-nullish type. Next, if any evaluate to null, the expression evaluates to null.

Because this is a searching algorithm and not a direct string comparison, this computation will not consider the operation's collation. This is consistent with other similar expressions like $indexOfCP and $regexFind. Like these other searching expressions, there will be no unicode normalization. This means that a character like 'é' may not be considered a match if the input string represents it as one unicode character and the 'find' string represents it as two characters: a normal 'e' and a combining diacritical mark.

Syntax:

{ $replaceAll: { input: <Expression>, find: <Expression>, replacement: <Expression> } }

Rejected syntax:

{ $replace: [ <Expression | input>, <Expression | find>, <Expression | replace> ] }

For now we will only support strings as all arguments, we will error on other types.



 Comments   
Comment by David Percy [ 25/Nov/19 ]

Closing as duplicate since we decided to do this as part of SERVER-32314.

Generated at Thu Feb 08 05:05:41 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.