On this page本页内容
$substrCP Returns the substring of a string. 返回字符串的子字符串。The substring starts with the character at the specified UTF-8 code point (CP) index (zero-based) in the string for the number of code points specified.子字符串以字符串中指定的UTF-8码位(CP)索引(从零开始)处的字符开始,该索引表示指定的码位数。
$substrCP has the following operator expression syntax:具有以下运算符表达式语法:
{ $substrCP: [ <string expression>, <code point index>, <code point count> ] }
string expression | string |
|
code point index | number | code point index |
code point count | number |
{ $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 ] } | "tér" |
{ $substrCP: [ "cafétéria", 7, 3 ] } | "ia" |
{ $substrCP: [ "cafétéria", 3, 1 ] } | "é" |
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运算符不同,后者按字节数提取子字符串,其中每个字符使用一到四个字节。
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字段表示yearSubstring后面指定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" }
A collection named 名为food contains the following documents:food的集合包含以下文档:
{ "_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:$substrCP运算符从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" }