$toObjectId (ObjectId への変換)
最終更新:2026-10-09
$toObjectId (ObjectId への変換)
$toObjectId は 24 文字の 16 進文字列を ObjectId に変換します。結合で最もよく使われる変換です。代表的な用途は、CSV や API からインポートした文字列 ID を $lookup 用の ObjectId にキャストしたり、$match 内で文字列の _id を ObjectId と比較したりすることです。文字列は有効な ObjectId リテラルである必要があり、違うと変換はエラーになります。null は null のままです。無効な入力をガードするには onError 付きの $convert を優先してください。
| カテゴリ | 集合・条件・変換 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $toObjectId: <expression> }
⚙️ パラメータ
| 式 | 24 文字の16進文字列。 |
|---|
戻り値:ObjectId。入力が null の場合は null
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $toObjectId: 結合用に文字列 ID をキャスト
db.orders.aggregate([
{ $project: {
uid: { $toObjectId: '$userIdStr' }
} }
])
出力:
{ '_id': 1, 'uid': { '$oid': '64b7f1c2e4b0a1b2c3d4e5f6' } }
📌 注意事項
- 文字列は 24 文字の 16 進でなければならない。それ以外はエラー
- null は null のまま
- $lookup では両側の型を揃える必要がある。結合前に変換する
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q無効な文字列の場合は?
Aエラーになります。$convert の onError なら代わりにフォールバックを返せます。
Qなぜ $lookup が一致しないのですか?
Aたいてい型の不一致です — 片方が文字列で他方が ObjectId になっています。先に $toObjectId で揃えてください。
Q空文字列は?
Anull になるのではなくエラーになります。先に $ifNull で処理してください。