【问题标题】:Query nested documents inside an object in mongodb查询 mongodb 对象内的嵌套文档
【发布时间】:2019-06-15 09:57:48
【问题描述】:

我使用 Mongoengine 和 mongodb 作为我的数据库开发了一个 Python-Flask 应用程序。
我想查询我的数据库并获取所有具有“用户”角色的用户的所有票证。
这是我的门票和用户的数据库模式:

class TicketReply(EmbeddedDocument):
    content = StringField(required=True, max_length=2000)
    date = ComplexDateTimeField(required=True)
    user = StringField(required=True, max_length=30)
    fileAttached = StringField(max_length=500)


class Ticket(EmbeddedDocument):
    subject = StringField(required=True, max_length=200)
    content = StringField(required=True, max_length=2000)
    department = StringField(required=True, max_length=20)
    status = StringField(required=True, max_length=20)
    createdDate = ComplexDateTimeField(required=True)
    fileAttached = StringField(max_length=500)
    id = StringField(max_length=500, required=True)
    replies = EmbeddedDocumentListField(TicketReply)


class Users(UserMixin, Document):
    fullName = StringField(required=True, max_length=200)
    email = EmailField(required=True, unique=True)
    phone = StringField(required=True, max_length=11, min_length=11, unique=True)
    password = StringField(required=True, max_length=500)
    registerDate = ComplexDateTimeField(required=True)
    role = StringField(required=True, max_length=20)
    tickets = EmbeddedDocumentListField(Ticket)

这是我获得某个用户票的方式:

user = Users.objects(email=current_user.email).first()
        getTickets = user.tickets

但我不知道如何获取具有“用户”角色的所有用户的所有票证。
任何帮助表示赞赏。

【问题讨论】:

    标签: python mongodb flask mongoengine flask-mongoengine


    【解决方案1】:

    如果我理解正确,您需要来自具有特定角色的所有用户的所有票证。 由于工单嵌套在用户文档中(通过使用 EmbeddedDocument),因此一种方法是:

    admin_tickets = []
    for user in User.objects(role='admin'):
        admin_tickets += user.tickets
    

    或者如果你想提高一点性能并且不需要用户信息,你可以使用scalar

    admin_tickets = []
    for user_tickets in User.objects(role='admin').scalar('tickets'):
        admin_tickets += user_tickets
    

    【讨论】:

    • 我想知道有什么方法可以让我获得门票用户吗?我的意思是现在我有我的用户的所有票,那么我怎么知道这些票属于哪个用户?
    • 看看这个,即使它简化了,我希望它能帮助你看到你有不同的选项:gist.github.com/bagerard/a7dc0b63dcfcfa1d48ff509774270d28我推荐选项1或2,3有点笨拙跨度>
    猜你喜欢
    • 2021-02-25
    • 2016-08-16
    • 2018-03-09
    • 2018-08-08
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多