我有一个 MongoDB 数据库,每个集合都采用这种形式:
'id': '1',
'TopKey':{
'4':[
{'name':'name1',
'age':18,
'dimensions':
[{'weight':125, 'height':72}],
'meals':
[{'breakfast':2, 'lunch':7, 'dinner':7}]
},
{'name':'name2',
'age':21,
'dimensions':
[{'weight':137, 'height':69}],
'meals':
[{'breakfast':0, 'lunch':7, 'dinner':6}]
}
],
'5':[
{'name':'name1',
'age':18,
'dimensions':
[{'weight':130, 'height':72}],
'meals':
[{'breakfast':5, 'lunch':7, 'dinner':7}]
},
{'name':'name2',
'age':21,
'dimensions':
[{'weight':140, 'height':69}],
'meals':
[{'breakfast':7, 'lunch':6, 'dinner':6}]
}
]}
我想查询此数据库并获取所有 age
和 weight
值的列表。
我试过这样查询,但它不适应,因为 TopKey
中的键可以是许多不同的数字集(有时是 0,1,2 有时是 4,5,8,9,例如)
a = db.collection_name.find({},{'TopKey.4.age'})
print(a[0])
> {'id': 1,
'TopKey':{'4': [
{'age':18},
{'age':21}]}}
我想要所有集合中所有 age
的列表。我也尝试使用 distinct('TopKey.4.age')
但它只收集列表中的唯一值。我正在寻找类似 distinct()
的东西,它以原始顺序从整个集合中返回值。
答案 0 :(得分:0)
您需要遍历记录结构,并且可以使用 set
来跟踪唯一值:
records = db.collection_name.find({}, {'TopKey': 1})
ages = set()
for record in records:
for k, v in record.get('TopKey').items():
for item in v:
ages.add(item.get('age'))
print(ages)
印刷品:
{18, 21}