$substrCP(集計)
定義
$substrCP
string の部分文字列を返します。 部分文字列は指定された UTF-8 コード ポイント(CP) の文字で始まる 指定されたコード ポイント数に対する string 内のインデックス(ゼロ ベース)。
{ $substrCP: [ <string expression>, <code point index>, <code point count> ] } フィールドタイプ説明string expression
string部分文字列が抽出される string。
string expression
は、string に変換される限り、任意の有効な式にすることができます。 式の詳細については、「式 」を参照してください。引数が
null
の値に解決されるか、欠落しているフィールドを参照する場合、$substrCP
は空の string を返します。引数が string または
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 ] }
"tér"
{ $substrCP: [ "cafétéria", 7, 3 ] }
"ia"
{ $substrCP: [ "cafétéria", 3, 1 ] }
"é"
動作
$substrCP
演算子は、コード ポイントを使用して部分文字列を抽出します。 この動作は、バイト数で部分文字列を抽出する$substrBytes
演算子とは異なります。各文字は 1 から 4 バイトの間を使用します。
例
1 バイトの文字セット
以下のドキュメントを持つ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
からの string の残りの部分を表します。 これは、 $strLenCP
を使用して string の長さから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" }