{"classes":3,
"people" : [
{name:John,
age:20,
city:London}
{name:Alice,
age:56,
city:Dublin}
]
}
我的数据库里有很多这样的文档。我只想选择数组(这里是John)中第一个子文档,然后创建一个只有第一个子文档年龄的有序元组。(另外,我只需要类数大于0的文档总数)
我试着这样做:
list = db.people.find({"classes": {'$gt': 0}})
records = sorted([(p["people"][0]["age"], p) for p in list])
但是,此代码返回
IndexError: list index out of range
谢谢你的帮助。你知道吗
我相信这里发生的事情是,查询返回的一些文档有一个空的“people”数组,因此当您尝试访问
p[people][0]
时,会出现列表索引超出范围的错误,因为索引0处没有元素。你知道吗如果您希望集合中的所有元素都应该始终具有非空的people数组,那么您应该找出存在此类对象的原因。另一个选择是更新查询以提高选择性,并且不返回对象
可能有一个更合适的查询,这取决于您对数据建模的方式,它允许您排除具有空人员数组的对象。您还应该考虑如果您的对象完全缺少人员数组,会发生什么情况。你知道吗
相关问题 更多 >
编程相关推荐