gpt4 book ai didi

python - 如何在 MongoEngine 的 ListField 中对 EmbeddedDocument 进行原子更新?

转载 作者:可可西里 更新时间:2023-11-01 10:34:35 24 4
gpt4 key购买 nike

我在 StackOverflow 上发现了一些类似的问题,但没有解决我正在寻找的问题,因此我们将不胜感激。

我的模型:

class BlogPost(EmbeddedDocument):
title = StringField(required=True)
blog_url = StringField(required=True, unique=True)
content = StringField()
turned_into_bitly_link = BooleanField(default=False)

class Person(Document):
name = StringField
blog_posts = ListField(EmbeddedDocumentField(BlogPost), default=list)

对于每个 blogpost.blog_url,我查询 Bitly API 以查看 url 是否已被缩短。我需要做的是将我从 Bitly 返回的数据与我数据库中的相应博客文章相匹配。我从 Bitly 取回的对象包含一个 url 字段,我需要用它来匹配和更新数据库中的相应博客文章。还应该说我一次将一批 blog_urls 发送到 Bitly,一个一个地发送不是一个选项。

给定一组 blog_posts 和 Bitly 对象,这些对象都来自给定的个人: person = Person.objects.get(name__exact='BobSmith')

如何通过唯一的 URL 字段选择嵌入在我的 Person 对象中的特定 blog_post?

作为权宜之计,我想我可以遍历我的 person 对象中的 blog_posts,如果 blog_post.url 与我的 Bitly 对象中的 URL 匹配,我就可以更新 turned_into_bitly_link 字段,但我不确定这是不是最有效的方法。

希望这是有道理的。我很乐意澄清,并提前感谢您的任何建议。

最佳答案

您可以使用位置运算符来更新匹配的嵌入文档。

这是来自测试的示例 (https://github.com/MongoEngine/mongoengine/blob/master/tests/test_queryset.py#L313)

def test_update_using_positional_operator(self):
"""Ensure that the list fields can be updated using the positional
operator."""

class Comment(EmbeddedDocument):
by = StringField()
votes = IntField()

class BlogPost(Document):
title = StringField()
comments = ListField(EmbeddedDocumentField(Comment))

BlogPost.drop_collection()

c1 = Comment(by="joe", votes=3)
c2 = Comment(by="jane", votes=7)

BlogPost(title="ABC", comments=[c1, c2]).save()

BlogPost.objects(comments__by="jane").update(inc__comments__S__votes=1)

post = BlogPost.objects.first()
self.assertEquals(post.comments[1].by, 'jane')
self.assertEquals(post.comments[1].votes, 8)

关于python - 如何在 MongoEngine 的 ListField 中对 EmbeddedDocument 进行原子更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10922956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com