首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mongoengine中只包含选定的嵌入式文档?

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

Stack Overflow用户
提问于 2016-12-23 11:23:49
回答 1查看 1.3K关注 0票数 2

我正在根据特定的EmbeddedDocument获取文档,但我不想在检索时获取所有的EmbeddedDocuments,只有匹配的EmbeddedDocument和主Document

这是我的密码:

学校嵌入式文档

代码语言:javascript
复制
class School(EmbeddedDocument):
    name = StringField(max_length=120)

用户文档

代码语言:javascript
复制
class User(Document):
    first_name = StringField(max_length=60, required=True)
    last_name = StringField(max_length=60)
    schools = EmbeddedDocumentListField(School)

供餐文件:

代码语言:javascript
复制
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()

我使用这段代码,检索在schools字段中有特定学校的schools

代码语言:javascript
复制
users = User.objects(school__match={"name": "Aukamm Elementary School"})

我只想得到选定的学校,这是Aukamm Elementary School在学校领域。

接收

代码语言:javascript
复制
[
    {
        "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"
            }
        ]
    }
]

所需输出

代码语言:javascript
复制
[
    {
        "first_name": "Rohit",
        "last_name": "Khatri",
        "schools": [
            {
                "name": "Aukamm Elementary School"
            }
        ]
    },
    {
        "first_name": "ABC",
        "last_name": "DEF",
        "schools": [
            {
                "name": "Aukamm Elementary School"
            }
        ]
    }
]

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-23 14:11:24

您可以在$filter函数中使用aggregate运算符

代码语言:javascript
复制
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" ] }
             }
        }
    } }
)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41300524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档