Definição
$substrCPRetorna a substring de uma string. A substring começa com o caractere no índice do ponto de código (CP) UTF-8 especificado (com base em zero) na string para o número de pontos de código especificados.
$substrCPtem a seguinte sintaxe de expressão do operador :{ $substrCP: [ <string expression>, <code point index>, <code point count> ] } CampoTipoDescriçãostring expressionstring
A string da qual a substring será extraída.
string expressionpode ser qualquer expressão válida desde que resolva para uma string. Para mais informações sobre expressões, consulte Expressões.Se o argumento for resolvido para um valor de
nullou se referir a um campo ausente, retornará uma string$substrCPvazia.Se o argumento não se resolver em uma string ou
nullnem se referir a um campo ausente, retornará um$substrCPerro.code point indexnúmero
Indica o ponto de partida da substring.
code point indexpode ser qualquer expressão válida, desde que resolva para um número inteiro não negativo.code point countnúmero
Pode ser qualquer expressão válida, desde que resolva para um número inteiro não negativo ou número que possa ser representado como um número inteiro (como 2.0).
ExemploResultados{ $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 ] }"é"
Comportamento
O operador usa os pontos de código $substrCP $substrBytes para extrair a substring. Este comportamento difere do operador que extrai a substring pelo número de bytes, em que cada caractere utiliza entre um e quatro bytes.
Exemplo
Conjunto de caracteres de byte único
Considere uma coleção inventory com os seguintes documentos:
db.inventory.insertMany( [ { _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 } ] )
A operação a seguir usa o operador para separar $substrCP o quarter valor em yearSubstring quarterSubstringe. O quarterSubstring campo representa o resto da string a partir do especificado byte index depois yearSubstring de. Ele é calculado subtraindo o byte index do comprimento da string $strLenCP utilizando.
db.inventory.aggregate( [ { $project: { item: 1, yearSubstring: { $substrCP: [ "$quarter", 0, 2 ] }, quarterSubstring: { $substrCP: [ "$quarter", 2, { $subtract: [ { $strLenCP: "$quarter" }, 2 ] } ] } } } ] )
A operação retorna os seguintes resultados:
{ _id: 1, item: "ABC1", yearSubstring: "13", quarterSubstring: "Q1" } { _id: 2, item: "ABC2", yearSubstring: "13", quarterSubstring: "Q4" } { _id: 3, item: "XYZ1", yearSubstring: "14", quarterSubstring: "Q2" }
Conjunto de caracteres de byte único e multibyte
Criar uma coleção food com os seguintes documentos:
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" } ] )
O exemplo seguinte utiliza o operador $substrCP para criar um menuCode de três bytes a partir do valor name:
db.food.aggregate( [ { $project: { "name": 1, "menuCode": { $substrCP: [ "$name", 0, 3 ] } } } ] )
A operação retorna os seguintes resultados:
{ _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" }