$substrCP (aggregation)
On this page本页内容
Definition定义
$substrCP
-
Returns the substring of a string. The substring starts with the character at the specified UTF-8 code point (CP)返回字符串的子字符串。子字符串以字符串中指定的UTF-8代码点(CP)index (zero-based) in the string for the number of code points specified.
索引(从零开始)处的字符开始,该索引用于指定的代码点数量。
$substrCP
has the following operator expression syntax:具有以下运算符表达式语法:{ $substrCP: [ <string expression>, <code point index>, <code point count> ] }
Field字段Type类型Description描述string expression
string The string from which the substring will be extracted.将从中提取子字符串的字符串。string expression
can be any valid expression as long as it resolves to a string. For more information on expressions, see Expressions.string expression
可以是任何有效的表达式,只要它解析为字符串即可。有关表达式的详细信息,请参阅表达式。
If the argument resolves to a value of如果参数解析为null
or refers to a field that is missing,$substrCP
returns an empty string.null
值或引用了丢失的字段,$substrCP
将返回一个空字符串。
If the argument does not resolve to a string or如果参数没有解析为字符串或null
nor refers to a missing field,$substrCP
returns an error.null
,也没有引用丢失的字段,那么$substrCP
将返回一个错误。code point index
number Indicates the starting point of the substring.指示子字符串的起始点。code point index
can be any valid expression as long as it resolves to a non-negative integer.可以是任何有效的表达式,只要它解析为非负整数即可。code point count
number Can be any valid expression as long as it resolves to a non-negative integer or number that can be represented as an integer (such as 2.0).可以是任何有效的表达式,只要它解析为非负整数或可以表示为整数的数字(如2.0)。Example示例Results结果{ $substrCP: [ "abcde", 1, 2 ] }
"bc"
{ $substrCP: [ "Hello World!", 6, 5 ] }
"World"
{ $substrCP: [ "cafétéria", 0, 5 ] }
"cafét"
{ $substrCP: [ "cafétéria", 5, 4 ] }
"éria"
{ $substrCP: [ "cafétéria", 7, 3 ] }
"ia"
{ $substrCP: [ "cafétéria", 3, 1 ] }
"é"
Behavior行为
The $substrCP
operator uses the code points to extract the substring. $substrCP
运算符使用代码点来提取子字符串。This behavior differs from the 此行为不同于$substrBytes
operator which extracts the substring by the number of bytes, where each character uses between one and four bytes.$substrBytes
运算符,后者按字节数提取子字符串,其中每个字符使用一到四个字节。
Example实例
Single-Byte Character Set单字节字符集
Consider an 考虑一个包含以下文档的inventory
collection with the following documents:inventory
集合:
{ "_id" : 1, "item" : "ABC1", quarter: "13Q1", "description" : "product 1" }
{ "_id" : 2, "item" : "ABC2", quarter: "13Q4", "description" : "product 2" }
{ "_id" : 3, "item" : "XYZ1", quarter: "14Q2", "description" : null }
The following operation uses the 以下操作使用$substrCP
operator to separate the quarter
value into a yearSubstring
and a quarterSubstring
. $substrCP
运算符将quarter
值分隔为yearSubstring
和quarterSubstring
。The quarterSubstring
field represents the rest of the string from the specified byte index
following the yearSubstring
. quarterSubstring
字段表示yearString
后面指定byte index
中字符串的其余部分。It is calculated by subtracting the 它是通过使用byte index
from the length of the string using $strLenCP
.$strLenCP
从字符串的长度中减去byte index
来计算的。
db.inventory.aggregate(
[
{
$project: {
item: 1,
yearSubstring: { $substrCP: [ "$quarter", 0, 2 ] },
quarterSubtring: {
$substrCP: [
"$quarter", 2, { $subtract: [ { $strLenCP: "$quarter" }, 2 ] }
]
}
}
}
]
)
The operation returns the following results:该操作返回以下结果:
{ "_id" : 1, "item" : "ABC1", "yearSubstring" : "13", "quarterSubtring" : "Q1" }
{ "_id" : 2, "item" : "ABC2", "yearSubstring" : "13", "quarterSubtring" : "Q4" }
{ "_id" : 3, "item" : "XYZ1", "yearSubstring" : "14", "quarterSubtring" : "Q2" }
Single-Byte and Multibyte Character Set单字节和多字节字符集
Create a 使用以下文档创建food
collection with the following documents:food
集合:
db.food.insertMany(
[
{ "_id" : 1, "name" : "apple" },
{ "_id" : 2, "name" : "banana" },
{ "_id" : 3, "name" : "éclair" },
{ "_id" : 4, "name" : "hamburger" },
{ "_id" : 5, "name" : "jalapeño" },
{ "_id" : 6, "name" : "pizza" },
{ "_id" : 7, "name" : "tacos" },
{ "_id" : 8, "name" : "寿司sushi" }
]
)
The following example uses the 以下示例使用$substrCP
operator to create a three byte menuCode
from the name
value:$substraCP
运算符从name
值创建一个三字节的menuCode
:
db.food.aggregate(
[
{
$project: {
"name": 1,
"menuCode": { $substrCP: [ "$name", 0, 3 ] }
}
}
]
)
The operation returns the following results:该操作返回以下结果:
{ "_id" : 1, "name" : "apple", "menuCode" : "app" }
{ "_id" : 2, "name" : "banana", "menuCode" : "ban" }
{ "_id" : 3, "name" : "éclair", "menuCode" : "écl" }
{ "_id" : 4, "name" : "hamburger", "menuCode" : "ham" }
{ "_id" : 5, "name" : "jalapeño", "menuCode" : "jal" }
{ "_id" : 6, "name" : "pizza", "menuCode" : "piz" }
{ "_id" : 7, "name" : "tacos", "menuCode" : "tac" }
{ "_id" : 8, "name" : "寿司sushi", "menuCode" : "寿司s" }