On this page本页内容
$regexFindAll
New in version 4.2.在版本4.2中新增。
Provides regular expression (regex) pattern matching capability in aggregation expressions. 在聚合表达式中提供正则表达式(regex)模式匹配功能。The operator returns an array of documents that contains information on each match. 运算符返回包含每个匹配项信息的文档数组。If a match is not found, returns an empty array.如果未找到匹配项,则返回空数组。
MongoDB uses Perl compatible regular expressions (i.e. "PCRE" ) version 8.41 with UTF-8 support.MongoDB使用与Perl兼容的正则表达式(即“PCRE”)版本8.41,支持UTF-8。
Prior to MongoDB 4.2, aggregation pipeline can only use the query operator 在MongoDB4.2之前,聚合管道只能在$regex
in the $match
stage. $match
阶段使用查询运算符$regex
。For more information on using regex in a query, see 有关在查询中使用regex的详细信息,请参阅$regex
.$regex
。
The $regexFindAll
operator has the following syntax:$regexFindAll
运算符语法如下:
{ $regexFindAll: { input: <expression> , regex: <expression>, options: <expression> } }
input |
| ||||||||||
regex |
| ||||||||||
options |
|
The operator returns an array:运算符返回一个数组:
If the operator finds a match, the operator returns an array of documents that contains the following information for each match:如果运算符找到匹配项,则该运算符返回一个文档数组,其中包含每个匹配项的以下信息:
input
中的匹配字符串,input
中匹配字符串的码位索引(非字节索引),以及()
in the regex pattern.regex
模式中,捕获组是用未转义的括号()
指定的。[ { "match" : <string>, "idx" : <num>, "captures" : <array of strings> }, ... ]
$regexFindAll
$regexFindAll
ignores the collation specified for the collection, 忽略为集合db.collection.aggregate()
, and the index, if used.db.collection.aggregate()
和索引(如果使用)指定的排序规则。
For example, the create a sample collection with collation strength 例如,创建一个排序强度为1
(i.e. compare base character only and ignore other differences such as case and diacritics):1
的样本集合(即仅比较基本字符,忽略大小写和音调符号等其他差异):
db.createCollection( "myColl", { collation: { locale: "fr", strength: 1 } } )
Insert the following documents:插入以下文档:
db.myColl.insertMany([ { _id: 1, category: "café" }, { _id: 2, category: "cafe" }, { _id: 3, category: "cafE" } ])
Using the collection's collation, the following operation performs a case-insensitive and diacritic-insensitive match:以下操作使用集合的排序规则执行不区分大小写和区分音调符号的匹配:
db.myColl.aggregate( [ { $match: { category: "cafe" } } ] )
The operation returns the following 3 documents:该操作返回以下3个文档:
{ "_id" : 1, "category" : "café" } { "_id" : 2, "category" : "cafe" } { "_id" : 3, "category" : "cafE" }
However, the aggregation expression 但是,聚合表达式$regexFind
ignores collation; that is, the following regular expression pattern matching examples are case-sensitive and diacritic sensitive:$regexFind
忽略排序规则;也就是说,以下正则表达式模式匹配示例区分大小写和区分音调:
db.myColl.aggregate( [ { $addFields: { results: { $regexFindAll: { input: "$category", regex: /cafe/ } } } } ] ) db.myColl.aggregate( [ { $addFields: { results: { $regexFindAll: { input: "$category", regex: /cafe/ } } } } ], { collation: { locale: "fr", strength: 1 } } // Ignored in the $regexFindAll )
Both operations return the following:这两个操作都返回以下结果:
{ "_id" : 1, "category" : "café", "results" : [ ] } { "_id" : 2, "category" : "cafe", "results" : [ { "match" : "cafe", "idx" : 0, "captures" : [ ] } ] } { "_id" : 3, "category" : "cafE", "results" : [ ] }
To perform a case-insensitive regex pattern matching, use the 要执行不区分大小写的正则表达式模式匹配,请改用i
Option instead. i
选项。See 有关示例,请参阅i
Option for an example.i
选项。
captures
If your regex pattern contains capture groups and the pattern finds a match in the input, the 如果regex模式包含捕获组,并且模式在captures
array in the results corresponds to the groups captured by the matching string. input
中找到匹配项,则结果中的captures
数组对应于匹配字符串捕获的组。Capture groups are specified with unescaped parentheses 在()
in the regex pattern. regex
模式中,捕获组使用未转义的括号()
指定。The length of the captures
array equals the number of capture groups in the pattern and the order of the array matches the order in which the capture groups appear.captures
数组的长度等于模式中的捕获组数,数组的顺序与捕获组的显示顺序相匹配。
Create a sample collection named 使用以下文档创建名为contacts
with the following documents:contacts
的示例集合:
db.contacts.insertMany([ { "_id": 1, "fname": "Carol", "lname": "Smith", "phone": "718-555-0113" }, { "_id": 2, "fname": "Daryl", "lname": "Doe", "phone": "212-555-8832" }, { "_id": 3, "fname": "Polly", "lname": "Andrews", "phone": "208-555-1932" }, { "_id": 4, "fname": "Colleen", "lname": "Duncan", "phone": "775-555-0187" }, { "_id": 5, "fname": "Luna", "lname": "Clarke", "phone": "917-555-4414" } ])
The following pipeline applies the regex pattern 以下管道将/(C(ar)*)ol/
to the fname
field:regex
模式/(C(ar)*)ol/
应用于fname
字段:
db.contacts.aggregate([ { $project: { returnObject: { $regexFindAll: { input: "$fname", regex: /(C(ar)*)ol/ } } } } ])
The regex pattern finds a match with fname
values Carol
and Colleen
:regex
模式查找与fname
值Carol
和Colleen
的匹配:
{ "_id" : 1, "returnObject" : [ { "match" : "Carol", "idx" : 0, "captures" : [ "Car", "ar" ] } ] } { "_id" : 2, "returnObject" : [ ] } { "_id" : 3, "returnObject" : [ ] } { "_id" : 4, "returnObject" : [ { "match" : "Col", "idx" : 0, "captures" : [ "C", null ] } ] } { "_id" : 5, "returnObject" : [ ] }
The pattern contains the capture group 模式包含捕获组(C(ar)*)
which contains the nested group (ar)
. (C(ar)*)
,其中包含嵌套组(ar)
。The elements in the captures
array correspond to the two capture groups. captures
数组中的元素对应于两个捕获组。If a matching document is not captured by a group (e.g. 如果组(例如Colleen
and the group (ar)
), $regexFindAll
replaces the group with a null placeholder.Colleen
和组(ar)
)未捕获匹配的文档,$regexFindAll
将用空占位符替换该组。
As shown in the previous example, the 如前一个示例所示,captures
array contains an element for each capture group (using null
for non-captures). captures
数组包含每个捕获组的元素(对于非捕获,使用null
)。Consider the following example which searches for phone numbers with New York City area codes by applying a logical 考虑下面的示例,该示例通过将逻辑or
of capture groups to the phone
field. or
捕获组应用于电话字段来搜索具有纽约市区号的phone
。Each group represents a New York City area code:每组代表一个纽约市区号:
db.contacts.aggregate([ { $project: { nycContacts: { $regexFindAll: { input: "$phone", regex: /^(718).*|^(212).*|^(917).*/ } } } } ])
For documents which are matched by the regex pattern, the 对于regex模式匹配的文档,captures
array includes the matching capture group and replaces any non-capturing groups with null
:captures
数组包含匹配的捕获组,并用null
替换任何非捕获组:
{ "_id" : 1, "nycContacts" : [ { "match" : "718-555-0113", "idx" : 0, "captures" : [ "718", null, null ] } ] } { "_id" : 2, "nycContacts" : [ { "match" : "212-555-8832", "idx" : 0, "captures" : [ null, "212", null ] } ] } { "_id" : 3, "nycContacts" : [ ] } { "_id" : 4, "nycContacts" : [ ] } { "_id" : 5, "nycContacts" : [ { "match" : "917-555-4414", "idx" : 0, "captures" : [ null, null, "917" ] } ] }
$regexFindAll
To illustrate the behavior of the 要演示本例中讨论的$regexFindAll
operator as discussed in this example, create a sample collection products
with the following documents:$regexFindAll
运算符的行为,请使用以下文档创建示例集合产品:
db.products.insertMany([ { _id: 1, description: "Single LINE description." }, { _id: 2, description: "First lines\nsecond line" }, { _id: 3, description: "Many spaces before line" }, { _id: 4, description: "Multiple\nline descriptions" }, { _id: 5, description: "anchors, links and hyperlinks" }, { _id: 6, description: "métier work vocation" } ])
By default, 默认情况下,$regexFindAll
performs a case-sensitive match. $regexFindAll
执行区分大小写的匹配。For example, the following aggregation performs a case-sensitive例如,以下聚合在$regexFindAll
on the description
field. description
字段上执行区分大小写的$regexFindAll
。The regex pattern regex模式/line/
does not specify any grouping:/line/
未指定任何分组:
db.products.aggregate([ { $addFields: { returnObject: { $regexFindAll: { input: "$description", regex: /line/ } } } } ])
The operation returns the following:运算结果如下:
{ "_id" : 1, "description" : "Single LINE description.", "returnObject" : [ ] } { "_id" : 2, "description" : "First lines\nsecond line", "returnObject" : [ { "match" : "line", "idx" : 6, "captures" : [ ]}, { "match" : "line", "idx" : 19, "captures" : [ ] } ] } { "_id" : 3, "description" : "Many spaces before line", "returnObject" : [ { "match" : "line", "idx" : 23, "captures" : [ ] } ] } { "_id" : 4, "description" : "Multiple\nline descriptions", "returnObject" : [ { "match" : "line", "idx" : 9, "captures" : [ ] } ] } { "_id" : 5, "description" : "anchors, links and hyperlinks", "returnObject" : [ ] } { "_id" : 6, "description" : "métier work vocation", "returnObject" : [ ] }
The following regex pattern 以下正则表达式模式/lin(e|k)/
specifies a grouping (e|k)
in the pattern:/lin(e|k)/
指定模式中的分组(e|k)
:
db.products.aggregate([ { $addFields: { returnObject: { $regexFindAll: { input: "$description", regex: /lin(e|k)/ } } } } ])
The operation returns the following:运算结果如下:
{ "_id" : 1, "description" : "Single LINE description.", "returnObject": [ ] } { "_id" : 2, "description" : "First lines\nsecond line", "returnObject" : [ { "match" : "line", "idx" : 6, "captures" : [ "e" ] }, { "match" : "line", "idx" : 19, "captures" : [ "e" ] } ] } { "_id" : 3, "description" : "Many spaces before line", "returnObject" : [ { "match" : "line", "idx" : 23, "captures" : [ "e" ] } ] } { "_id" : 4, "description" : "Multiple\nline descriptions", "returnObject" : [ { "match" : "line", "idx" : 9, "captures" : [ "e" ] } ] } { "_id" : 5, "description" : "anchors, links and hyperlinks", "returnObject" : [ { "match" : "link", "idx" : 9, "captures" : [ "k" ] }, { "match" : "link", "idx" : 24, "captures" : [ "k" ] } ] } { "_id" : 6, "description" : "métier work vocation", "returnObject" : [ ] }
In the return option, the 在idx
field is the code point index and not the byte index. return
选项中,idx
字段是代码点索引,而不是字节索引。To illustrate, consider the following example that uses the regex pattern 为了进行说明,请考虑以下使用regex模式/tier/
:/tier/
的示例:
db.products.aggregate([ { $addFields: { returnObject: { $regexFindAll: { input: "$description", regex: /tier/ } } } } ])
The operation returns the following where only the last record matches the pattern and the returned 该操作返回以下结果,其中只有最后一条记录与模式匹配,并且返回的idx
is 2
(instead of 3 if using a byte index)idx
是2(如果使用字节索引,则不是3)
{ "_id" : 1, "description" : "Single LINE description.", "returnObject" : [ ] } { "_id" : 2, "description" : "First lines\nsecond line", "returnObject" : [ ] } { "_id" : 3, "description" : "Many spaces before line", "returnObject" : [ ] } { "_id" : 4, "description" : "Multiple\nline descriptions", "returnObject" : [ ] } { "_id" : 5, "description" : "anchors, links and hyperlinks", "returnObject" : [ ] } { "_id" : 6, "description" : "métier work vocation", "returnObject" : [ { "match" : "tier", "idx" : 2, "captures" : [ ] } ] }
i
You cannot specify options in both the 不能在regex
and the options
field.regex
和options
字段中同时指定选项。
To perform case-insensitive pattern matching, include the i option as part of the regex field or in the options field:要执行不区分大小写的模式匹配,请在regex
字段或options
字段中包含i
选项:
// Specify i as part of the regex field { $regexFindAll: { input: "$description", regex: /line/i } } // Specify i in the options field { $regexFindAll: { input: "$description", regex: /line/, options: "i" } } { $regexFindAll: { input: "$description", regex: "line", options: "i" } }
For example, the following aggregation performs a case-insensitive例如,以下聚合在$regexFindAll
on the description
field. description
字段上执行不区分大小写的$regexFindAll
。The regex pattern regex模式/line/
does not specify any grouping:/line/
未指定任何分组:
db.products.aggregate([ { $addFields: { returnObject: { $regexFindAll: { input: "$description", regex: /line/i } } } } ])
The operation returns the following documents:该操作返回以下文档:
{ "_id" : 1, "description" : "Single LINE description.", "returnObject" : [ { "match" : "LINE", "idx" : 7, "captures" : [ ] } ] } { "_id" : 2, "description" : "First lines\nsecond line", "returnObject" : [ { "match" : "line", "idx" : 6, "captures" : [ ] }, { "match" : "line", "idx" : 19, "captures" : [ ] } ] } { "_id" : 3, "description" : "Many spaces before line", "returnObject" : [ { "match" : "line", "idx" : 23, "captures" : [ ] } ] } { "_id" : 4, "description" : "Multiple\nline descriptions", "returnObject" : [ { "match" : "line", "idx" : 9, "captures" : [ ] } ] } { "_id" : 5, "description" : "anchors, links and hyperlinks", "returnObject" : [ ] } { "_id" : 6, "description" : "métier work vocation", "returnObject" : [ ] }
m
You cannot specify options in both the 不能在regex
and the options
field.regex
和options
字段中同时指定选项。
To match the specified anchors (e.g. 要匹配多行字符串每行的指定锚定(例如^
, $
) for each line of a multiline string, include the m option as part of the regex field or in the options field:^
、$
),请将m
选项作为regex
字段的一部分或在options
字段中包括:
// Specify m as part of the regex field { $regexFindAll: { input: "$description", regex: /line/m } } // Specify m in the options field { $regexFindAll: { input: "$description", regex: /line/, options: "m" } } { $regexFindAll: { input: "$description", regex: "line", options: "m" } }
The following example includes both the 以下示例包括i
and the m
options to match lines starting with either the letter s
or S
for multiline strings:i
和m
选项,用于匹配多行字符串中以字母s
或s
开头的行:
db.products.aggregate([ { $addFields: { returnObject: { $regexFindAll: { input: "$description", regex: /^s/im } } } } ])
The operation returns the following:运算结果如下:
{ "_id" : 1, "description" : "Single LINE description.", "returnObject" : [ { "match" : "S", "idx" : 0, "captures" : [ ] } ] } { "_id" : 2, "description" : "First lines\nsecond line", "returnObject" : [ { "match" : "s", "idx" : 12, "captures" : [ ] } ] } { "_id" : 3, "description" : "Many spaces before line", "returnObject" : [ ] } { "_id" : 4, "description" : "Multiple\nline descriptions", "returnObject" : [ ] } { "_id" : 5, "description" : "anchors, links and hyperlinks", "returnObject" : [ ] } { "_id" : 6, "description" : "métier work vocation", "returnObject" : [ ] }
x
You cannot specify options in both the 不能在regex
and the options
field.regex
和options
字段中同时指定选项。
To ignore all unescaped white space characters and comments (denoted by the un-escaped hash 要忽略模式中所有未转义的空白字符和注释(由未转义哈希#
character and the next new-line character) in the pattern, include the s option in the options field:#
字符和下一个换行字符表示),请在选项字段中包含x
选项:
// Specify x in the options field { $regexFindAll: { input: "$description", regex: /line/, options: "x" } } { $regexFindAll: { input: "$description", regex: "line", options: "x" } }
The following example includes the 以下示例包括用于跳过未转义空白和注释的x
option to skip unescaped white spaces and comments:x
选项:
db.products.aggregate([ { $addFields: { returnObject: { $regexFindAll: { input: "$description", regex: /lin(e|k) # matches line or link/, options:"x" } } } } ])
The operation returns the following:运算结果如下:
{ "_id" : 1, "description" : "Single LINE description.", "returnObject" : [ ] } { "_id" : 2, "description" : "First lines\nsecond line", "returnObject" : [ { "match" : "line", "idx" : 6, "captures" : [ "e" ] }, { "match" : "line", "idx" : 19, "captures" : [ "e" ] } ] } { "_id" : 3, "description" : "Many spaces before line", "returnObject" : [ { "match" : "line", "idx" : 23, "captures" : [ "e" ] } ] } { "_id" : 4, "description" : "Multiple\nline descriptions", "returnObject" : [ { "match" : "line", "idx" : 9, "captures" : [ "e" ] } ] } { "_id" : 5, "description" : "anchors, links and hyperlinks", "returnObject" : [ { "match" : "link", "idx" : 9, "captures" : [ "k" ] }, { "match" : "link", "idx" : 24, "captures" : [ "k" ] } ] } { "_id" : 6, "description" : "métier work vocation", "returnObject" : [ ] }
s
You cannot specify options in both the 不能在regex
and the options
field.regex
和options
字段中同时指定选项。
To allow the dot character (i.e. 要允许模式中的点字符(即.
) in the pattern to match all characters including the new line character, include the s option in the options field:.
)匹配包括换行字符在内的所有字符,请在options
字段中包含s
选项:
// Specify s in the options field { $regexFindAll: { input: "$description", regex: /m.*line/, options: "s" } } { $regexFindAll: { input: "$description", regex: "m.*line", options: "s" } }
The following example includes the 以下示例包括允许点字符(即s
option to allow the dot character (i.e. .) to match all characters including new line as well as the i
option to perform a case-insensitive match:.
)匹配所有字符(包括新行)的s
选项,以及执行不区分大小写匹配的i
选项:
db.products.aggregate([ { $addFields: { returnObject: { $regexFindAll: { input: "$description", regex:/m.*line/, options: "si" } } } } ])
The operation returns the following:运算结果如下:
{ "_id" : 1, "description" : "Single LINE description.", "returnObject" : [ ] } { "_id" : 2, "description" : "First lines\nsecond line", "returnObject" : [ ] } { "_id" : 3, "description" : "Many spaces before line", "returnObject" : [ { "match" : "Many spaces before line", "idx" : 0, "captures" : [ ] } ] } { "_id" : 4, "description" : "Multiple\nline descriptions", "returnObject" : [ { "match" : "Multiple\nline", "idx" : 0, "captures" : [ ] } ] } { "_id" : 5, "description" : "anchors, links and hyperlinks", "returnObject" : [ ] } { "_id" : 6, "description" : "métier work vocation", "returnObject" : [ ] }
$regexFindAll
to Parse Email from String$regexFindAll
从字符串分析电子邮件Create a sample collection 使用以下文档创建集合feedback
with the following documents:feedback
示例:
db.feedback.insertMany([ { "_id" : 1, comment: "Hi, I'm just reading about MongoDB -- aunt.arc.tica@example.com" }, { "_id" : 2, comment: "I wanted to concatenate a string" }, { "_id" : 3, comment: "How do I convert a date to string? Contact me at either cam@mongodb.com or c.dia@mongodb.com" }, { "_id" : 4, comment: "It's just me. I'm testing. fred@MongoDB.com" } ])
The following aggregation uses the 以下聚合使用$regexFindAll
to extract all emails from the comment
field (case insensitive).$regexFindAll
从comment
字段中提取所有email
(不区分大小写)。
db.feedback.aggregate( [ { $addFields: { "email": { $regexFindAll: { input: "$comment", regex: /[a-z0-9_.+-]+@[a-z0-9_.+-]+\.[a-z0-9_.+-]+/i } } } }, { $set: { email: "$email.match"} } ] )
The stage uses the 阶段使用$addFields
stage to add a new field email
to the document. $addFields
阶段向文档添加新的字段email
。The new field is an array that contains the result of performing the 新字段是一个数组,其中包含对$regexFindAll
on the comment
field:comment
字段执行$regexFindAll
的结果:
{ "_id" : 1, "comment" : "Hi, I'm just reading about MongoDB -- aunt.arc.tica@example.com", "email" : [ { "match" : "aunt.arc.tica@example.com", "idx" : 38, "captures" : [ ] } ] } { "_id" : 2, "comment" : "I wanted to concatenate a string", "email" : [ ] } { "_id" : 3, "comment" : "How do I convert a date to string? Contact me at either cam@mongodb.com or c.dia@mongodb.com", "email" : [ { "match" : "cam@mongodb.com", "idx" : 56, "captures" : [ ] }, { "match" : "c.dia@mongodb.com", "idx" : 75, "captures" : [ ] } ] } { "_id" : 4, "comment" : "It's just me. I'm testing. fred@MongoDB.com", "email" : [ { "match" : "fred@MongoDB.com", "idx" : 28, "captures" : [ ] } ] }
The stage use the 阶段使用$set
stage to reset the email
array elements to the "email.match"
value(s). $set
阶段将email
数组元素重置为"email.match"
值。If the current value of 如果email
is null, the new value of email
is set to null.email
的当前值为null
,则email
的新值设置为null
。
{ "_id" : 1, "comment" : "Hi, I'm just reading about MongoDB -- aunt.arc.tica@example.com", "email" : [ "aunt.arc.tica@example.com" ] } { "_id" : 2, "comment" : "I wanted to concatenate a string", "email" : [ ] } { "_id" : 3, "comment" : "How do I convert a date to string? Contact me at either cam@mongodb.com or c.dia@mongodb.com", "email" : [ "cam@mongodb.com", "c.dia@mongodb.com" ] } { "_id" : 4, "comment" : "It's just me. I'm testing. fred@MongoDB.com", "email" : [ "fred@MongoDB.com" ] }
Create a sample collection 使用以下文档创建集合feedback
with the following documents:feedback
示例:
db.feedback.insertMany([ { "_id" : 1, comment: "Hi, I'm just reading about MongoDB -- aunt.arc.tica@example.com" }, { "_id" : 2, comment: "I wanted to concatenate a string" }, { "_id" : 3, comment: "How do I convert a date to string? Contact me at either cam@mongodb.com or c.dia@mongodb.com" }, { "_id" : 4, comment: "It's just me. I'm testing. fred@MongoDB.com" } ])
To reply to the feedback, assume you want to parse the local-part of the email address to use as the name in the greetings. 要回复反馈,假设您想解析电子邮件地址的本地部分,将其用作问候语中的名称。Using the 使用captured
field returned in the $regexFindAll
results, you can parse out the local part of each email address:$regexFindAll
结果中返回的captured
字段,可以解析出每个电子邮件地址的本地部分:
db.feedback.aggregate( [ { $addFields: { "names": { $regexFindAll: { input: "$comment", regex: /([a-z0-9_.+-]+)@[a-z0-9_.+-]+\.[a-z0-9_.+-]+/i } }, } }, { $set: { names: { $reduce: { input: "$names.captures", initialValue: [ ], in: { $concatArrays: [ "$$value", "$$this" ] } } } } } ] )
The stage uses the 阶段使用$addFields
stage to add a new field names
to the document. $addFields
$addFields
阶段向文档添加新的字段names
。The new field contains the result of performing the 新字段包含对$regexFindAll
on the comment
field:comment
字段执行$regexFindAll
的结果:
{ "_id" : 1, "comment" : "Hi, I'm just reading about MongoDB -- aunt.arc.tica@example.com", "names" : [ { "match" : "aunt.arc.tica@example.com", "idx" : 38, "captures" : [ "aunt.arc.tica" ] } ] } { "_id" : 2, "comment" : "I wanted to concatenate a string", "names" : [ ] } { "_id" : 3, "comment" : "How do I convert a date to string? Contact me at either cam@mongodb.com or c.dia@mongodb.com", "names" : [ { "match" : "cam@mongodb.com", "idx" : 56, "captures" : [ "cam" ] }, { "match" : "c.dia@mongodb.com", "idx" : 75, "captures" : [ "c.dia" ] } ] } { "_id" : 4, "comment" : "It's just me. I'm testing. fred@MongoDB.com", "names" : [ { "match" : "fred@MongoDB.com", "idx" : 28, "captures" : [ "fred" ] } ] }
The stage use the 阶段使用带有$set
stage with the $reduce
operator to reset names
to an array that contains the "$names.captures"
elements.$reduce
运算符的$set
阶段将名称重置为包含"$names.captures"
元素的数组。
{ "_id" : 1, "comment" : "Hi, I'm just reading about MongoDB -- aunt.arc.tica@example.com", "names" : [ "aunt.arc.tica" ] } { "_id" : 2, "comment" : "I wanted to concatenate a string", "names" : [ ] } { "_id" : 3, "comment" : "How do I convert a date to string? Contact me at either cam@mongodb.com or c.dia@mongodb.com", "names" : [ "cam", "c.dia" ] } { "_id" : 4, "comment" : "It's just me. I'm testing. fred@MongoDB.com", "names" : [ "fred" ] }
For more information on the behavior of the 有关captures
array and additional examples, see captures
Output Behavior.captures
数组行为和其他示例的更多信息,请参阅captures
输出行为。