简体   繁体   中英

How can I query nested mongoDB data in Python?

I have some data in a mongoDB collection like this. Some of it may be even more nested and have more "members" entries. I want to query the data so that I get all the "artist" entries and their "members" entries.

{
    "songname": "random name",
    "artist": [
        {
            "name": "Band A", 
            "members": [      
                {
                    "name": "Unit A1",
                    "members": [
                        {
                            "name": "Member A1",
                            "members": []
                        }
                    ]
                },
                {
                    "name": "Unit A2",
                    "members": [
                        {
                            "name": "Member A2",
                            "members": []
                        }
                    ]
                },
                {
                    "name": "Unit A3",
                    "members": [
                        {
                            "name": "Member A3",
                            "members": []
                        }
                    ]
                }
            ]
        },
        {
            "name": "Band B",
            "members": [
                {
                    "name": "Unit A1",
                    "members": [
                        {
                            "name": "Member A1",
                            "members": []
                        }
                    ]
                },
                {
                    "name": "Unit A2",
                    "members": [
                        {
                            "name": "Member A2",
                            "members": []
                        }
                    ]
                },
                {
                    "name": "Unit A3",
                    "members": [
                        {
                            "name": "Member A3",
                            "members": []
                        }
                    ]
                }
            ]
        }
    ]
}

Something like this:

{
    "name": "Band A",
    "members": [...]
}
{
    "name": "Unit A1",
    "members": [...]
}
{
    "name": "Member A1",
    "members": [...]
}
{
    "name": "Band B",
    "members": [...]
}
{
    "name": "Unit B1",
    "members": [...]
}
{
    "name": "Member B1",
    "members": [...]
}

Also, is there a way to get only a specific "artist", eg "Unit B1" and it's "members" in the same style?

You can use your collection just as you would use a nested dictionary:

collection["artist"]

will give you the result you were asking for.

To get the members of "Unit B1", we have to iterate over all artists:

for x in collection["artist"]:
    if x["name"] == "Unit B1":
        print(x["members"])
        break

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM