Definición
$substrCPDevuelve la subcadena de una cadena. La subcadena comienza con el carácter en el8 punto de código UTF- (CP) especificado. índice (basado en cero) en la cadena para la cantidad de puntos de código especificados.
$substrCPtiene lo siguiente Sintaxis de expresión del operador:{ $substrCP: [ <string expression>, <code point index>, <code point count> ] } CampoTipoDescripciónstring expressionstring
La cadena de la que se extraerá la subcadena.
string expressionpuede ser cualquier expresión válida siempre que se resuelva en una cadena. Para más información sobre expresiones, consulte Expresiones.Si el argumento se resuelve en un valor de
nullo hace referencia a un campo que falta, devuelve una cadena$substrCPvacía.Si el argumento no se resuelve en una cadena o
nullni hace referencia a un campo faltante, devuelve un$substrCPerror.code point indexNúmero
Indica el punto de inicio de la subcadena.
code point indexpuede ser cualquier expresión válida siempre que se resuelva en un entero no negativo.code point countNúmero
Puede ser cualquier expresión válida siempre que se resuelva en un entero no negativo o un número que pueda representarse como un entero 2.0 (como).
EjemploResultados{ $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 ] }"é"
Comportamiento
El operador utiliza los puntos de código $substrCP $substrBytes para extraer la subcadena. Este comportamiento difiere del operador, que extrae la subcadena por el número de bytes, donde cada carácter ocupa entre uno y cuatro bytes.
Ejemplo
Conjunto de caracteres de un solo byte
Considere una colección inventory con los siguientes 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 } ] )
La siguiente operación utiliza el operador para separar $substrCP el quarter valor en un yearSubstring y quarterSubstring un. El quarterSubstring campo representa el resto de la cadena a partir del especificado byte index después yearSubstring del. Se calcula restando byte index de la longitud de la cadena $strLenCP utilizando.
db.inventory.aggregate( [ { $project: { item: 1, yearSubstring: { $substrCP: [ "$quarter", 0, 2 ] }, quarterSubstring: { $substrCP: [ "$quarter", 2, { $subtract: [ { $strLenCP: "$quarter" }, 2 ] } ] } } } ] )
La operación devuelve los siguientes 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 un solo byte y multibyte
Crea una colección food con los siguientes 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" } ] )
El siguiente ejemplo utiliza el operador $substrCP para crear un menuCode de tres bytes a partir del valor name:
db.food.aggregate( [ { $project: { "name": 1, "menuCode": { $substrCP: [ "$name", 0, 3 ] } } } ] )
La operación devuelve los siguientes 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" }