我们假设我正在收集来自不同网站的篮球统计数据并且有一个看起来像这样的文档(在一个名为Players的集合中):
{
"Name" : "Joe Basketball",
"website1" : {
"2018": {
"FG%" : 70,
"3P%" : 45
}
},
"website2" : {
"2018" : {
"FT%" : 90,
"Age" : 25
}
}
}
是否可以通过一个查询从两个不同的子阵列中提取值?
如果我想在其中一个子数组中找到统计数据,我会这样做:
site = 'website1'
year = 2018
stats = ['FG%', 'Age']
paths = {stat : '${}.{}.{}'.format(site, year, stat) for stat in stats}
db.Players.aggregate([{'$match': {'Name' : 'Joe Basketball'}},
{'$project': {'_id' : 0,
'stats' : paths}}])
我一直在尝试使用' $unwind'
运算符在投影统计数据之前展平数据,但却无法使其工作。任何帮助表示赞赏。