$indexOfCP (コードポイント単位の部分文字列位置)
最終更新:2026-10-09
$indexOfCP (コードポイント単位の部分文字列位置)
$indexOfCP は部分文字列が最初に現れる位置をコードポイント(文字数)単位で返します。見つからなければ -1 です。文字単位で数えるため人間の感覚と一致し、中国語や絵文字でも安全で、テキスト処理の推奨選択肢です。任意の start と end で検索範囲を制限できますが、これらもコードポイント単位です。$substrCP や $strLenCP と組み合わせて切り出しに使えます。引数のいずれかが null なら結果は null です。
| カテゴリ | 文字列 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $indexOfCP: [ <string-expression>, <substring>, <start>, <end> ] }
⚙️ パラメータ
| 文字列 | 必須。元の文字列。 |
|---|---|
| 部分文字列 | 必須。検索する部分文字列。 |
| 開始/終了 | 任意の検索範囲(コードポイント単位)。 |
戻り値:コードポイントインデックス(0 始まり)。見つからない場合は -1、いずれかの引数が null の場合は null。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $indexOfCP: メールアドレス内の @ を検索
db.users.aggregate([
{ $project: { at: { $indexOfCP: [ '$email', '@' ] } } }
])
出力:
{ "_id": 1, "at": 6 }
{ "_id": 2, "at": -1 }
📌 注意事項
- 0 始まり。中国語や絵文字も 1 として数える
- 通常は $substrCP や $strLenCP と組み合わせて切り出しに使う
- start/end が文字列長を超えても範囲内に収められる — エラーにならない
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q見つからない場合は?
A-1 です。
Q$indexOfBytes と同じですか?
A純粋な ASCII では同じです。中国語では異なります — $indexOfCP は文字位置を返します。
Q空の部分文字列の場合は?
A多くの言語と同じく開始インデックス(既定 0)を返します。