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

How to retrieve sub documents in a Array from mongoDB using python script

我对 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" 检索分数。

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

pymongo 的 find 方法在内部使用 db.collections.find 实际上是 returns 游标。当您迭代游标时,您将获得单个文档。返回的文档将在 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.