$substrCP (집계)
정의
$substrCP
문자열의 부분 string 을 반환합니다. 하위 문자열은 지정된 UTF-8 코드 포인트(CP) 의 문자로 string 시작합니다. 지정된 코드 포인트 수에 대한 의 인덱스(0부터 시작)입니다.
$substrCP
에는 다음과 같은 연산자 표현식 구문이 있습니다.{ $substrCP: [ <string expression>, <code point index>, <code point count> ] } 필드유형설명string expression
문자열
부분 문자열이 추출될 문자열입니다.
string expression
는 문자열로 해석되는 한 모든 유효한 표현식 일 수 있습니다. 표현식에 대한 자세한 내용은 표현식 연산자를 참조하세요.인수가 값으로
null
해석되거나 누락된 필드$substrCP
를 참조하는 경우 는 빈 문자열을 반환합니다.인수가 문자열 또는 로 해석되지 않거나
null
누락된 필드 를$substrCP
참조하는 경우 는 오류를 반환합니다.code point index
숫자
하위 문자열의 시작점을 나타냅니다.
code point index
는 음수가 아닌 정수로 해석되는 한 모든 유효한 표현식이 될 수 있습니다.code point count
숫자
음수가 아닌 정수 또는 정수(예: 2.0)로 표현할 수 있는 숫자로 해석되는 한 모든 유효한 표현식 이 될 수 있습니다.
예시결과{ $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 ] }
"é"
행동
$substrCP
연산자는 코드 포인트를 사용하여 부분 문자열을 추출합니다. 이 동작은 바이트 수로 부분 문자열을 추출하는 $substrBytes
연산자와 다릅니다(각 문자는 1~4바이트 사용).
예시
싱글 바이트 문자 세트
다음 문서가 포함된 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 }
다음 연산은 $substrCP
연산자를 사용하여 quarter
값을 yearSubstring
과 quarterSubstring
으로 분리합니다. quarterSubstring
필드는 yearSubstring
에 이어서 지정된 byte index
의 나머지 문자열을 나타냅니다. 이는 $strLenCP
를 사용하여 문자열의 길이에서 byte index
를 뺀 값으로 계산됩니다.
db.inventory.aggregate( [ { $project: { item: 1, yearSubstring: { $substrCP: [ "$quarter", 0, 2 ] }, quarterSubtring: { $substrCP: [ "$quarter", 2, { $subtract: [ { $strLenCP: "$quarter" }, 2 ] } ] } } } ] )
이 연산은 다음과 같은 결과를 반환합니다.
{ "_id" : 1, "item" : "ABC1", "yearSubstring" : "13", "quarterSubtring" : "Q1" } { "_id" : 2, "item" : "ABC2", "yearSubstring" : "13", "quarterSubtring" : "Q4" } { "_id" : 3, "item" : "XYZ1", "yearSubstring" : "14", "quarterSubtring" : "Q2" }
싱글바이트 및 멀티바이트 문자 세트
다음 문서로 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" } ] )
다음 예에서는 $substrCP
연산자를 사용하여 name
값에서 3바이트 menuCode
를 생성합니다.
db.food.aggregate( [ { $project: { "name": 1, "menuCode": { $substrCP: [ "$name", 0, 3 ] } } } ] )
이 연산은 다음과 같은 결과를 반환합니다.
{ "_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" }