$substrBytes (バイト単位の部分文字列)
最終更新:2026-10-09
$substrBytes (バイト単位の部分文字列)
$substrBytes は UTF-8 バイト位置で部分文字列を取り出します。start と length の両方がバイト数です。純粋な ASCII テキスト(バイト数 = 文字数)や、厳密なバイト制御が必要な場合に適しています。中国語のようなマルチバイト文字では、バイト境界が文字の途中に当たると出力が文字化けするため注意が必要です。その場合はコードポイント基準の $substrCP を使いましょう。負の start は空文字列、負の length は残り全部を返します。
| カテゴリ | 文字列 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $substrBytes: [ <string-expression>, <byte-start>, <byte-length> ] }
⚙️ パラメータ
| 文字列 | 必須。元の文字列式。 |
|---|---|
| バイト開始位置 | 必須の整数(バイト単位、0 始まり)。 |
| バイト長 | 必須の整数(バイト単位)。 |
戻り値:抽出された部分文字列。いずれかの引数が null の場合は null。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $substrBytes: コンテンツの先頭 10 バイト
db.files.aggregate([
{ $project: { head: { $substrBytes: [ '$content', 0, 10 ] } } }
])
出力:
{ "_id": 1, "head": "hello wor" }
{ "_id": 2, "head": "MongoDB su" }
📌 注意事項
- 中国語は UTF-8 で 3 バイト。バイト単位の切断は文字を途中で割る恐れがある
- 負の start は空文字列、負の length は残り全部を返す
- 純粋な ASCII なら $substrCP と結果が一致する
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Qバイト単位の切断で中国語が文字化けしますか?
A可能性があります — 中国語は 1 文字 3 バイトで、境界が悪いと文字化けします。$substrCP を推奨します。
Qいつ $substrCP と結果が一致しますか?
A文字列が純粋な ASCII のときです。
Q何に使うと良いですか?
A純粋な ASCII テキストや、厳密なバイト数の見積りです。