1

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

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

4

1 回答 1

2

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

doc["scores.2.score"]

您正在尝试获取与字典中的键对应的scores.2.score项目doc。但是正如您从问题中显示的结构中看到的那样,没有名为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.
于 2015-01-22T13:47:15.333 回答