MongoDB $substrCP 运算符介绍
$substrCP
是 MongoDB 中的一个字符串聚合运算符,用于按代码点从字符串中提取子字符串。代码点是指每个字符在 Unicode 编码表中的唯一数字标识符。
语法
$substrCP
运算符的语法如下所示:
{ $substrCP: [ <string>, <startingIndex>, <length> ] }
<string>
:需要提取子字符串的字符串。<startingIndex>
:提取子字符串的起始位置,从 0 开始计数。<length>
:需要提取的子字符串的长度。如果没有指定,则提取从起始位置开始到字符串的末尾的所有字符。
使用场景
$substrCP
运算符通常用于以下场景:
- 提取字符串中的一部分,例如从邮件主题中提取日期时间。
- 从字符串中提取特定的代码点,例如从 Emoji 表情中提取指定的表情。
示例
下面给出两个使用 $substrCP 运算符的示例。
示例 1
假设有一个存储了用户信息的集合 user,其中包含了每个用户的名字和姓氏。现在我们需要查询每个用户名字的前两个字符,可以使用以下聚合管道:
db.user.aggregate([
{
$project: {
firstName: { $substrCP: ["$name", 0, 2] }
}
}
])
这个聚合管道中,我们首先使用 $project 运算符将集合中的每个文档投影为只包含 firstName 字段的文档。在 $project 运算符中,我们使用 $substrCP 运算符提取名字字段中前两个字符作为 firstName 字段的值。
假设集合中有以下两个文档:
{ "_id": 1, "name": "John Doe" }
{ "_id": 2, "name": "Jane Smith" }
使用上述聚合管道,可以得到以下结果:
{ "_id": 1, "firstName": "Jo" }
{ "_id": 2, "firstName": "Ja" }
示例 2
假设有一个存储了商品信息的集合 product,其中包含了每个商品的名称和价格。现在我们需要查询每个商品名称中从第二个字符开始的前三个字符,可以使用以下聚合管道:
db.product.aggregate([
{
$project: {
namePrefix: { $substrCP: ["$name", 1, 3] }
}
}
])
这个聚合管道中,我们同样使用 $project
运算符将集合中的每个文档投影为只包含 namePrefix 字段的文档。在 $project
运算符中,我们使用 $substrCP
运算符提取名字字段中从第二个字符开始的前三个字符作为 namePrefix
字段的值。
假设集合中有以下两个文档:
{ "_id": 1, "name": "Apple iPhone 13", "price": 999 }
{ "_id": 2, "name": "Samsung Galaxy S21", "price": 799 }
使用上述聚合管道,可以得到以下结果:
{ "_id": 1, "namePrefix": "ppl" }
{ "_id": 2, "namePrefix": "ams" }
结论
$substrCP
运算符是 MongoDB 中的一个字符串聚合运算符,用于从字符串中提取子字符串。与 $substrBytes
运算符不同,$substrCP
运算符按照 Unicode 码点来提取子字符串,可以保证对于多字节字符的处理正确无误。在实际的应用场景中,可以根据具体的需求,使用 $substrCP
运算符方便地处理字符串。