我有一個蒙戈文件如下:回到使用MongoDB的db.find()子文檔的子文檔
收集聯賽:
leagues { id = 1,
seasons {[
{ id: 2008,
teams: [
{ id: "abcdefghijklmnop1", name: "name01", roster: [{ ... }] },
{ id: "abcdefghijklmnopq", name: "name02", roster: [{ ... }] },
{ id: "abcdefghijklmnop3", name: "name03", roster: [{ ... }] },
]
},
{ id: 2009,
teams: [
{ id: "abcdefghijklmnop4", name: "name06", roster: [{ ... }] },
{ id: "abcdefghijklmnop5", name: "name09", roster: [{ ... }] },
{ id: "abcdefghijklmnop6", name: "name12", roster: [{ ... }] },
]
}
]
},
{ id = 2, ... }
聯賽具有獨特的季節。每個獨特的季節都有一個獨特的「團隊」列表。每個球隊在那個聯盟的那個賽季都有一支獨特的球隊陣容。
這個作品非常適合作爲一個文檔,讓聯盟展示真的很容易,但是真的很難查詢只返回特定聯盟中給定球隊的給定球隊。
使用:
db.leagues.find(
{"seasons.teams.id":"abcdefghijklmnopq"},
{"seasons": { $elemMatch : { "teams.id" : "abcdefghijklmnopq" }}}
);
的偉大工程只返回給定的聯賽單賽季。但是,那個賽季的所有球隊仍然是文件的一部分。
關於如何進一步限制文檔結果只返回特定團隊的任何建議?
編輯:
而且這樣做:
db.leagues.aggregate([
{$unwind: '$seasons'},
{$match: {'seasons.teams.id': 'abcdefghijklmnopq'}},
{$project: {_id: 0, id: '$seasons.teams.id'}}
]);
將返回:
{ "id": ["id1...", "id2...", ... "idn..."] }
'teams.id'在您的示例文檔中不存在。您如何在查詢中使用該字段? – BatScream 2014-12-03 07:38:40
@BatScream Ya。修正了。 – ehsk 2014-12-03 07:47:06