$substrCP (agregação)
Nesta página
Definição
$substrCP
Retorna a substring de uma string. A substring começa com o caractere especificado8 noponto de código (CP) índice (baseado em zero) na string para o número de pontos de código especificados.
$substrCP
tem a seguintesintaxe de expressão do operador :{ $substrCP: [ <string expression>, <code point index>, <code point count> ] } CampoTipoDescriçãostring expression
stringA string da qual a substring será extraída.
string expression
pode ser qualquer expressão válida desde que resolva para uma string. Para obter mais informações sobre expressões, consulte Operadores de Expressão.Se o argumento for resolvido para um valor de
null
ou se referir a um campo ausente,$substrCP
retornará uma string vazia.Se o argumento não se resolver em uma string ou
null
nem se referir a um campo ausente,$substrCP
retornará um erro.code point index
númeroIndica o ponto de partida da substring.code point index
pode ser qualquer expressão válida, desde que resolva para um número inteiro não negativo.code point count
númeroPode 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 $substrCP
usa os pontos de código para extrair a substring. Este comportamento difere do operador $substrBytes
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:
{ "_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 $substrCP
para separar o valor quarter
em um yearSubstring
e um quarterSubstring
. O campo quarterSubstring
representa o resto da string a partir do byte index
especificado depois de yearSubstring
. Ele é calculado subtraindo o byte index
do comprimento da string utilizando $strLenCP
.
db.inventory.aggregate( [ { $project: { item: 1, yearSubstring: { $substrCP: [ "$quarter", 0, 2 ] }, quarterSubtring: { $substrCP: [ "$quarter", 2, { $subtract: [ { $strLenCP: "$quarter" }, 2 ] } ] } } } ] )
A operação retorna os seguintes resultados:
{ "_id" : 1, "item" : "ABC1", "yearSubstring" : "13", "quarterSubtring" : "Q1" } { "_id" : 2, "item" : "ABC2", "yearSubstring" : "13", "quarterSubtring" : "Q4" } { "_id" : 3, "item" : "XYZ1", "yearSubstring" : "14", "quarterSubtring" : "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" }