mongoDB に深くネストされたドキュメントがあり、個々のサブオブジェクトを取得したいと考えています。
例:
{
"schoolName": "Cool School",
"principal": "Joe Banks",
"rooms": [
{
"number": 100
"teacher": "Alvin Melvin"
"students": [
{
"name": "Bort"
"currentGrade": "A"
},
// ... many more students
]
},
// ... many more rooms
]
}
最近 Mongo が更新され、 $elemMatch プロジェクションを使用して 1 レベルの深さのサブオブジェクトを取得できるようになりました。
var projection = { _id: 0, rooms: { $elemMatch: { number: 100 } } };
db.schools.find({"schoolName": "Cool School"}, projection);
// returns { "rooms": [ /* array containing only the matching room */ ] }
しかし、同じ方法で学生 (2 レベルの深さ) をフェッチしようとすると、エラーが発生します。
var projection = { _id: 0, "rooms.students": { $elemMatch: { name: "Bort" } } };
db.schools.find({"schoolName": "Cool School"}, projection);
// "$err": "Cannot use $elemMatch projection on a nested field (currently unsupported).", "code": 16344
mongoDB ドキュメントで任意の深いサブオブジェクトを取得する方法はありますか?
私はMongo 2.2.1を使用しています