子文档选择

2024-06-08 22:14:30 发布

您现在位置:Python中文网/ 问答频道 /正文

{"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

谢谢你的帮助。你知道吗


Tags: name文档数据库cityage数组johnpeople
1条回答
网友
1楼 · 发布于 2024-06-08 22:14:30

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

如果您希望集合中的所有元素都应该始终具有非空的people数组,那么您应该找出存在此类对象的原因。另一个选择是更新查询以提高选择性,并且不返回对象

db.people.find({"classes": {'$gt': 0}, 'people.0' : { '$exists' : True}})

可能有一个更合适的查询,这取决于您对数据建模的方式,它允许您排除具有空人员数组的对象。您还应该考虑如果您的对象完全缺少人员数组,会发生什么情况。你知道吗

相关问题 更多 >