$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.
索引(从零开始)处的字符开始,该索引用于指定的代码点数量。
$substrCPhas the following operator expression syntax:具有以下运算符表达式语法:{ $substrCP: [ <string expression>, <code point index>, <code point count> ] }Field字段Type类型Description描述string expressionstring The string from which the substring will be extracted.将从中提取子字符串的字符串。string expressioncan 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如果参数解析为nullor refers to a field that is missing,$substrCPreturns an empty string.null值或引用了丢失的字段,$substrCP将返回一个空字符串。
If the argument does not resolve to a string or如果参数没有解析为字符串或nullnor refers to a missing field,$substrCPreturns an error.null,也没有引用丢失的字段,那么$substrCP将返回一个错误。code point indexnumber Indicates the starting point of the substring.指示子字符串的起始点。code point indexcan be any valid expression as long as it resolves to a non-negative integer.可以是任何有效的表达式,只要它解析为非负整数即可。code point countnumber 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" }