Python 子文档选择

Python 子文档选择,python,mongodb,tuples,Python,Mongodb,Tuples,我的数据库中有很多这样的文档。我只想选择数组中的第一个子文档(这里是John),然后创建一个仅包含第一个子文档年龄的有序元组。(另外,我只需要类数大于0的文档总数) 我试着这样做: {"classes":3, "people" : [ {name:John, age:20, city:London} {name:Alice, age:56, city:Dublin} ] } 但是,此代码返回 list = db.peo

我的数据库中有很多这样的文档。我只想选择数组中的第一个子文档(这里是John),然后创建一个仅包含第一个子文档年龄的有序元组。(另外,我只需要类数大于0的文档总数)

我试着这样做:

{"classes":3,
"people" : [

    {name:John,
    age:20,
    city:London}

    {name:Alice,
    age:56,
    city:Dublin}

           ]
}
但是,此代码返回

list = db.people.find({"classes": {'$gt': 0}})
records = sorted([(p["people"][0]["age"], p) for p in list])

谢谢您的帮助。

我相信这里发生的事情是,您的查询返回的某些文档有一个空的“people”数组,因此当您尝试访问
p[people][0]
时,您会遇到列表索引超出范围的错误,因为索引0处没有元素

如果您希望集合中的所有元素都应该始终具有非空的人员数组,那么您应该找出这些对象存在的原因。另一个选项是更新查询,使其更具选择性,并且不返回对象

IndexError: list index out of range

根据您对数据建模的方式,可能会有一个更合适的查询,该查询允许您排除具有空人员数组的对象。你也应该考虑如果你有完全丢失人数组的对象会发生什么。

你不是在这里问这个问题吗?
db.people.find({"classes": {'$gt': 0}, 'people.0' : { '$exists' : True}})