社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  MongoDB

在MongoDB中查询对象内的嵌套文档

Mohammad Ghonchesefidi • 5 年前 • 1391 次点击  

我已经开发了一个python flask应用程序,使用mongoengine和mongodb作为我的数据库。
我想查询我的数据库并获取所有用户的所有票证,这些用户的角色是“user”。
这是我的票务和用户数据库模式:

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社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/48176
 
1391 次点击  
文章 [ 1 ]  |  最新文章 5 年前
bagerard
Reply   •   1 楼
bagerard    6 年前

如果我理解正确的话,你需要所有的票,来自所有具有特定角色的用户。 由于票证(通过使用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