Запросить вложенные документы внутри объекта в mongodb - PullRequest
0 голосов
/ 15 июня 2019

Я разработал приложение Python-Flask, используя Mongoengine и mongodb в качестве своей базы данных.
Я хочу запросить свою базу данных и получить все билеты всех пользователей, которые имеют роль «пользователя».
вот моя база данныхмодал для билетов и пользователей:

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 Ответ

1 голос
/ 15 июня 2019

Если я правильно понимаю, вам нужны все билеты от всех пользователей с определенной ролью.Поскольку заявки вложены (с помощью 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
...