查询mongodb中对象内的嵌套文档

时间:2019-06-15 09:57:48

标签: python mongodb flask mongoengine flask-mongoengine

我使用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

但是我不知道如何获得所有具有'users'角色的用户的票证。
任何帮助表示赞赏。

1 个答案:

答案 0 :(得分: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