我有一份mongo文件如下:
收集是联盟:
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..."] }
答案 0 :(得分:1)
假设您的团队文档有一个id字段作为您的聚合/查找操作建议,例如:
{ name: "name01",id:abc, roster: [{ ... }] }
您还需要unwind
seasons.teams
数组。
db.leagues.aggregate([
{$unwind:"$seasons"},
{$match:{"seasons.teams.id":"abcdefghijklmnopq"}},
{$unwind:"$seasons.teams"},
{$match:{"seasons.teams.id":"abcdefghijklmnopq"}},
{$group:{"_id":"$_id","id":{$push:"$seasons.teams.id"}}},
{$project:{"_id":0,id:1}}
])