Mongoengine更好的查询来更新listfield中的嵌入文档

2024-05-29 11:06:07 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我编写的函数,它将会话文档中某个成员的members嵌入文档的“new_messages”标志设置为true。在

def check_and_update_new_messages_flag(self, pk, user):
    conversation = Conversation.objects.with_id(pk)
    if conversation is None:
        raise ConversationNotFoundException
    messages = Message.objects(conversation=pk).count()
    messages_viewed_by_user = Message.objects(conversation=pk, viewed_by=user).count()
    if messages == messages_viewed_by_user:
        for index, member in enumerate(conversation.members):
            if member.user == user:
                member = Members()
                member.user = user
                conversation.members[index] = member
                conversation.save()
        conversation.update()

我正在创建一个Members对象并替换匹配发生的索引处的Members对象,只是为了将新的\u messages标志更新为false(在模型中设置为默认值)。是否有更好的查询来执行此任务。我不需要额外的循环和if语句来提高这个函数的效率。在

编辑: 模型:

^{pr2}$

另外,示例文档:

{
    "_id" : ObjectId("55c37053aee967157371372e"),
    "opportunity" : ObjectId("55a3907c8c5bf672f4ad31b8"),
    "members" : [ 
        {
            "user" : ObjectId("5579a6b38c5bf602374b9a0b"),
            "new_messages" : true
        }, 
        {
            "user" : ObjectId("abcdef12345abcdef1234503"),
            "new_messages" : true
        }, 
        {
            "user" : ObjectId("5581168c45910c43912e6a01"),
            "new_messages" : true
        }
    ],
    "counts" : {
        "members" : 3,
        "messages" : 6
    },
    "status" : "active",
    "responded_on" : NumberLong(1438871635000),
    "created_by" : ObjectId("abcdef12345abcdef1234503"),
    "updated_at" : NumberLong(1439194817000)
}

Tags: 文档truenewbyifobjectsmembermessages

热门问题