On this page本页内容
$replaceAll¶New in version 4.4.版本4.4中的新功能。
Replaces all instances of a search string in an input string with a replacement string.用替换字符串替换输入字符串中搜索字符串的所有实例。
$replaceAll is both case-sensitive and diacritic-sensitive, and ignores any collation present on a collection.区分大小写,区分重音,并忽略集合中存在的任何排序规则。
The $replaceAll operator has the following operator expression syntax:$replaceAll运算符具有以下运算符表达式语法:
| input |
|
| find |
|
| replacement |
|
The input, find, and replacement expressions must evaluate to a string or a null, or $replaceAll fails with an error.input、find和replacement表达式的计算结果必须为字符串或null,否则$replaceAll失败并出现错误。
$replaceAllIf input or find refer to a field that is missing, they return 如果null.input或find引用的字段缺失,则返回null。
If any one of input, find, or replacement evaluates to a 如果null, the entire $replaceAll expression evaluates to null:input、find或replacement中的任何一个计算结果为null,则整个$replaceAll表达式的计算结果为null:
| Result | |
|---|---|
{ $replaceAll: { input: null, find: "abc", replacement: "ABC" } } |
null |
{ $replaceAll: { input: "abc", find: null, replacement: "ABC" } } |
null |
{ $replaceAll: { input: "abc", find: "abc", replacement: null } } |
null |
$replaceAllString matching for all 所有$replaceAll expressions is always case-sensitive and diacritic-sensitive. $replaceAll表达式的字符串匹配始终区分大小写,区分重音。Any collation configured on a collection, 使用db.collection.aggregate(), or index is ignored when performing string comparisons with $replaceAll.$replaceAll执行字符串比较时,将忽略在集合、db.collection.aggregate()或索引上配置的任何排序规则。
For example, create a sample collection with collation strength 例如,创建排序规则强度为1:1的样本集合:
A collation strength of 排序强度为1 compares base character only and ignores other differences such as case and diacritics.1时,只比较基本字符,而忽略大小写和变音符号等其他差异。
Next, insert three example documents:接下来,插入三个示例文档:
The following 以下$replaceAll operation tries to find and replace all instances of “Cafe” in the name field:$replaceAll操作尝试查找并替换name字段中“Cafe”的所有实例:
Because 由于$replaceAll ignores the collation configured for this collection, the operation only matches the instance of “Cafe” in document 2:$replaceAll忽略为此集合配置的排序规则,因此该操作只匹配文档2中“Cafe”的实例:
Operators which respect collation, such as 考虑排序规则(如$match, would match all three documents when performing a string comparison against “Cafe” due to this collection’s collation strength of 1.$match)的运算符将在与“Cafe”进行字符串比较时匹配所有三个文档,因为此集合的排序规则强度为1。
$replaceAllThe $replaceAll aggregation expression does not perform any unicode normalization. $replaceAll聚合表达式不执行任何unicode规范化。This means that string matching for all 这意味着,在尝试匹配时,所有$replaceAll expressions will consider the number of code points used to represent a character in unicode when attempting a match.$replaceAll表达式的字符串匹配将考虑用于以unicode表示字符的代码点数。
For example, the character 例如,可以使用一个或两个代码点以unicode表示字符é can be represented in unicode using either one code point or two:é:
| Unicode | ||
|---|---|---|
\xe9 |
é |
1 ( \xe9 ) |
e\u0301 |
é |
2 ( e + \u0301 ) |
Using 如果将$replaceAll with a find string where the character é is represented in unicode with one code point will not match any instance of é that uses two code points in the input string.$replaceAll与find字符串一起使用,其中字é符以unicode表示并带有一个代码点,则与在input字符串中使用两个代码点的任何é实例都不匹配。
The following table shows whether a match occurs for a find string of “café” when compared to input strings where 下表显示了与由一个或两个代码点表示的é is represented by either one code point or two. é的input字符串相比,“café的find字符串是否匹配。The find string in this example uses one code point to represent the 本例中的é character:find字符串使用一个代码点来表示字符é:
| Match | |
|---|---|
{ $replaceAll: { input: "caf\xe9", find: "café", replacement: "CAFE" } } |
yes |
{ $replaceAll: { input: "cafe\u0301", find: "café", replacement: "CAFE" } } |
no |
Because 因为$replaceAll does not perform any unicode normalization, only the first string comparison matches, where both the find and input strings use one code point to represent é.$replaceAll不执行任何unicode规范化,所以只有第一个字符串比较匹配,其中find字符串和input字符串都使用一个代码点é来表示。
Create an 使用以下文档创建inventory collection with the following documents:inventory集合:
The following example replaces each instance of “blue paint” in the 以下示例将item field with “red paint”:item字段中的每个“blue paint”实例替换为“red paint”:
The operation returns the following results:操作返回以下结果: