1

I am quite new to python and mongoDB and need to achieve this task.

I have a collection containing documents similar to the sample below.

{
        "_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
                }
        ]
}

I am trying to read this collection in a python script. I am unable to retrieve the score from the sub document

cursor = students.find()

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

I am trying to find the lowest score for project work for each student, but i am unable to retrieve the score using index "scores.2.score".

Need some help to understand the retrieval method.

1 Answer 1

2

pymongo's find method internally uses db.collections.find which actually returns the cursor. When you iterate the cursor, you will get the individual documents. The documents returned will be represented in Python as a dictionary. So, in this case, doc is a dictionary. When you do

doc["scores.2.score"]

you are trying to fetch an item corresponding to the key scores.2.score in the doc dictionary. But as you see from the structure shown in the question, there is no such key called scores.2.score. Actually, when you do

doc["scores"]

you will get

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

which is a list and to get the second element from it, you will do

doc["scores"][2]

which will give you the dictionary

    {
        "type": "projectwork",
        "score": 93.36341655949683
    }

and to access score in it, you will do

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

and that will actually give you

93.36341655949683.
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.