如何使用python脚本从mongoDB中检索数组中的子文档

Posted

技术标签:

【中文标题】如何使用python脚本从mongoDB中检索数组中的子文档【英文标题】:How to retrieve sub documents in a Array from mongoDB using python script 【发布时间】:2015-03-21 07:53:02 【问题描述】:

我对 python 和 mongoDB 还很陌生,需要完成这项任务。

我有一个包含类似于以下示例的文档的集合。


        "_id" : 1900123,
        "name" : "AAAAA BBBB",
        "scores" : [
                
                        "type" : "exam",
                        "score" : 44.51211101958831
                ,
                
                        "type" : "quiz",
                        "score" : 0.6578497966368002
                ,
                
                        "type" : "projectwork",
                        "score" : 93.36341655949683
                ,
                
                        "type" : "projectwork",
                        "score" : 49.43132782777443
                
        ]

我正在尝试在 python 脚本中阅读此集合。我无法从子文档中检索分数

cursor = students.find()

for doc in cursor:
        score1=doc["scores.2.score"];
        print("score1=",score1);

我正在尝试查找每个学生的项目作业的最低分数,但我无法使用索引“scores.2.score”检索分数。

需要一些帮助来理解检索方法。

【问题讨论】:

【参考方案1】:

pymongo 的find 方法在内部使用db.collections.find,它实际上返回了光标。当您迭代光标时,您将获得各个文档。返回的文档将在 Python 中表示为字典。所以,在这种情况下,doc 是一个字典。当你这样做时

doc["scores.2.score"]

您正在尝试获取与 doc 字典中的键 scores.2.score 对应的项目。但是正如您从问题中显示的结构中看到的那样,没有名为scores.2.score 的键。实际上,当你这样做时

doc["scores"]

你会得到

[
    
        "type": "exam",
        "score": 44.51211101958831
    ,
    
        "type": "quiz",
        "score": 0.6578497966368002
    ,
    
        "type": "projectwork",
        "score": 93.36341655949683
    ,
    
        "type": "projectwork",
        "score": 49.43132782777443
    
]

这是一个列表,要从中获取第二个元素,您将这样做

doc["scores"][2]

这会给你字典

    
        "type": "projectwork",
        "score": 93.36341655949683
    

并在其中访问score,您会这样做

doc["scores"][2]["score"]

这实际上会给你

93.36341655949683.

【讨论】:

以上是关于如何使用python脚本从mongoDB中检索数组中的子文档的主要内容,如果未能解决你的问题,请参考以下文章

如何从 MongoDB 数组中检索第一个和最后一个元素并将其设置为不同的字段?

使用 pymongo 将数据从 Mysql 迁移到 MongoDB

MongoDB,如何将没有可匹配元素的元素检索到数组中?

如何使用 mongoose ORM 存储/检索到 mongodb

如何在 Spring Rest Call 中使用 GridFS 从 Mongodb 发送和检索图像?

如何使用节点 js 从 mongodb 检索用户完整数据