如何在mongoengine中只包含选中的嵌入文档?

2024-06-16 13:14:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我是基于特定的EmbeddedDocument获取文档,但我不想在检索时获取所有{},只获取与main Document匹配的{}。在

我的代码是:

学校嵌入文档

class School(EmbeddedDocument):
    name = StringField(max_length=120)

用户文档

^{pr2}$

送料文件:

user = User.objects.create(first_name="Rohit", last_name="Khatri")
user.schools = [
    School(name="Auden High School")),
    School(name="Baldwin Boys High School"),
    School(name="Baldwin Girls High School"),
    School(name="Aukamm Elementary School"),
    School(name="Mason-Rice Elementary")
]
user.save()

user = User.objects.create(first_name="ABC", last_name="DEF")
user.schools = [
    School(name="Little Harbor Elementary School")),
    School(name="Aukamm Elementary School"),
    School(name="Mason-Rice Elementary")
]
user.save()

我使用这段代码检索users,他们的schools字段中有一个特定的学校:

users = User.objects(school__match={"name": "Aukamm Elementary School"})

我只想在schools字段中得到选择的学校Aukamm Elementary School。在

接收

[
    {
        "first_name": "Rohit",
        "last_name": "Khatri",
        "schools": [
            {
                "name": "Auden High School"
            },
            {
                "name": "Baldwin Boys High School"
            },
            {
                "name": "Baldwin Girls High School"
            },
            {
                "name": "Aukamm Elementary School"
            },
            {
                "name": "Mason-Rice Elementary"
            }
        ]
    },
    {
        "first_name": "ABC",
        "last_name": "DEF",
        "schools": [
            {
                "name": "Little Harbor Elementary School"
            },
            {
                "name": "Aukamm Elementary School"
            },
            {
                "name": "Mason-Rice Elementary"
            }
        ]
    }
]

所需输出

[
    {
        "first_name": "Rohit",
        "last_name": "Khatri",
        "schools": [
            {
                "name": "Aukamm Elementary School"
            }
        ]
    },
    {
        "first_name": "ABC",
        "last_name": "DEF",
        "schools": [
            {
                "name": "Aukamm Elementary School"
            }
        ]
    }
]

谢谢


Tags: nameobjects学校firstlasthighriceschool
1条回答
网友
1楼 · 发布于 2024-06-16 13:14:20

您可以将^{}函数中的^{}运算符用作

users = User.objects(school__match={ "name": "Aukamm Elementary School" }).aggregate(
    { "$project": {
        "first_name": 1,
        "last_name": 1,
        "schools": {
             "$filter": {
                  "input": "$schools",
                  "as": "school",
                  "cond": { "$eq": [ "$$school.name", "Aukamm Elementary School" ] }
             }
        }
    } }
)

相关问题 更多 >