$substrCP (コードポイント単位の部分文字列)
最終更新:2026-10-09
$substrCP (コードポイント単位の部分文字列)
$substrCP は Unicode コードポイント(おおよそ文字数)で位置を数えて部分文字列を取り出します。中国語・日本語・絵文字のようなマルチバイト文字でも完全に安全で、ユーザーが見るテキストを扱う際の推奨演算子です。バイト数で数える $substrBytes と比べ、人間が文字を数える感覚と一致します。負の start は空文字列、負の length は残り全部を返します。
| カテゴリ | 文字列 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $substrCP: [ <string-expression>, <code-point-start>, <code-point-length> ] }
⚙️ パラメータ
| 文字列 | 必須。元の文字列式。 |
|---|---|
| コードポイント開始位置 | 必須の整数(コードポイント単位、0 始まり)。 |
| コードポイント長 | 必須の整数(コードポイント単位)。 |
戻り値:抽出された部分文字列。いずれかの引数が null の場合は null。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $substrCP: ニックネームの最初の 2 文字
db.users.aggregate([
{ $project: { nickname: { $substrCP: [ '$name', 0, 2 ] } } }
])
出力:
{ "_id": 1, "nickname": "阿明" }
{ "_id": 2, "nickname": "小美" }
📌 注意事項
- コードポイントで数える — 中国語 1 文字や絵文字 1 つは 1 として数える
- 負の start は空文字列、負の length は残り全部を返す
- $strLenCP と組み合わせて範囲外の切断を避ける
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q絵文字は何文字と数えますか?
A多くの絵文字は 1 コードポイント(1 として数える)ですが、合成絵文字は複数になる場合があります。
Q$substrBytes より $substrCP を選ぶのはいつですか?
Aユーザーが見るテキストには $substrCP、厳密なバイト数が必要なら $substrBytes を使います。
Qlength が文字列の長さを超えると?
A残っている分だけを返します — エラーにはなりません。