String (テキスト)
最終更新:2026-10-09
String (テキスト)
String は MongoDB で最も一般的なフィールド型で、UTF-8 テキストを保持します。`$eq` で完全一致、`$regex` でパターン一致します。全文検索には text インデックスと `$text` が必要です。数値や日付を文字列として格納すると、範囲クエリやソートが数値ではなく辞書順になります('9' は '10' より後にソート)。結果が黙って壊れます。
| カテゴリ | BSON 型 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ name: "apple" }
{ name: { $regex: "^app" } }
db.articles.find({ $text: { $search: "mongodb" } })
戻り値:文字列値そのもの。クエリでは一致するドキュメントを返します
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// String: 正規表現と全文検索
use shop
db.users.find({ email: { $regex: '@example\\.com$' } })
db.articles.find({ $text: { $search: 'mongodb indexing' } })
出力:
// メールが @example.com で終わるユーザーと、mongodb/indexing に一致する記事を返す
📌 注意事項
- UTF-8 として格納される。インデックスキーには約1KBの上限がある
- 数値を文字列として格納しない。ソートが壊れる
- 文字列比較は大文字小文字を区別する
- アンカーなしの $regex はインデックスを使えず、コレクションをスキャンする
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
QString と ObjectId はいつ使い分けますか?
Aビジネス識別子(外部ID、注文番号)には String。自動一意で時刻順の ID が必要なら ObjectId を使います。
Q文字列フィールドにインデックスを張れますか?
A張れます。等価/範囲には通常のインデックス、全文検索には text インデックスを使います。
Qなぜ '9' は '10' より大きいのですか?
A文字列は文字単位で比較します。'9' のコードポイントは '1' より大きいため、'9' は '10' より後にソートされます。