Object (ドキュメント) (ネストドキュメント)
最終更新:2026-10-09
Object (ドキュメント) (ネストドキュメント)
Object はネストされたサブドキュメントです。MongoDB は自己記述的なモデルのために任意の深さでネストできます。ネストしたフィールドにはドットパスでアクセスし、クエリでは引用符で囲みます。例: `'profile.address.city'`。1対1のデータ(ユーザープロフィール、注文の住所)に適しており、独立してクエリされる・成長するデータは別コレクションに切り出します。
| カテゴリ | BSON 型 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ profile: { name: "alice", address: { city: "beijing" } } }
db.users.find({ "profile.address.city": "beijing" })
戻り値:ネストされたドキュメントそのもの。クエリでは一致するドキュメントを返します
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// Object: ネストドキュメントの書き込みとクエリ
use shop
db.users.insertOne({ profile: { name: 'alice', address: { city: 'beijing' } } })
db.users.find({ 'profile.address.city': 'beijing' })
出力:
{ _id: ObjectId('...'), profile: { name: 'alice', address: { city: 'beijing' } } }
📌 注意事項
- ドットパスでネストフィールドにアクセス。ドットや $ を含むキーはエスケープする
- 1対1は埋め込み、1対多は配列か別コレクションにする
- $set はサブドキュメント全体を置換、ドットパスなら単一フィールドを更新
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Qドキュメントはどの深さまでネストできますか?
A公式の上限は約 100 レベルですが、実用上はまず 16MB のドキュメントサイズ制限が先に効きます。
Q埋め込むべきか、別コレクションにすべきか?
A親と一緒に読み出す 1対1 データは埋め込み、独立して成長・クエリされるデータは別コレクションにします。
Qネストしたフィールドはどうクエリしますか?
A引用符付きのドットパスを使います: { 'profile.address.city': 'beijing' }。