$indexOfBytes (バイト単位の部分文字列位置)
最終更新:2026-10-09
$indexOfBytes (バイト単位の部分文字列位置)
$indexOfBytes は部分文字列が最初に現れる位置を UTF-8 バイト単位のインデックスで返します。見つからなければ -1 です。任意の start と end で検索範囲を制限できます。マルチバイト文字があるとバイト位置とコードポイント位置はずれます。中国語は複数バイトを占めるため、バイト位置が文字の途中に当たることがあります。ユーザーが見るテキストには $indexOfCP を推奨します。引数のいずれかが null なら結果は null です。
| カテゴリ | 文字列 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $indexOfBytes: [ <string-expression>, <substring>, <start>, <end> ] }
⚙️ パラメータ
| 文字列 | 必須。元の文字列。 |
|---|---|
| 部分文字列 | 必須。検索する部分文字列。 |
| 開始/終了 | 任意の検索範囲(バイト単位)。 |
戻り値:バイトインデックス(0 始まり)。見つからない場合は -1、いずれかの引数が null の場合は null。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $indexOfBytes: ログメッセージ内の ERROR を検索
db.logs.aggregate([
{ $project: { pos: { $indexOfBytes: [ '$msg', 'ERROR' ] } } }
])
出力:
{ "_id": 1, "pos": 12 }
{ "_id": 2, "pos": -1 }
📌 注意事項
- 0 始まり。見つからないと -1
- 中国語ではバイト位置と文字位置がずれる — $indexOfCP の方が直感的
- start/end もバイト単位で数える
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q部分文字列が見つからない場合は?
A-1 です。
Q中国語テキストで位置はずれますか?
Aはい — 中国語 1 文字は 3 バイトです。中国語テキストには $indexOfCP を推奨します。
Q検索範囲を制限するには?
A3 番目と 4 番目の引数に start と end を渡します。