Python 如何在MongoEngine中对列表字段中的嵌入文档进行原子更新?
我在StackOverflow上发现了一些类似的问题,但没有任何问题能够解决我所寻找的问题,因此我们将非常感谢您的帮助 我的模型:Python 如何在MongoEngine中对列表字段中的嵌入文档进行原子更新?,python,mongodb,mongoengine,Python,Mongodb,Mongoengine,我在StackOverflow上发现了一些类似的问题,但没有任何问题能够解决我所寻找的问题,因此我们将非常感谢您的帮助 我的模型: class BlogPost(EmbeddedDocument): title = StringField(required=True) blog_url = StringField(required=True, unique=True) content = StringField() turned_into_bitly_link = Boolean
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获得的数据与数据库中相应的blogpost进行匹配。我从Bitly返回的对象包含一个url字段,我需要使用该字段来匹配和更新数据库中相应的blogpost。还应该说,我一次向Bitly发送一批blog_URL,一个接一个不是一个选项
给定一组blog_帖子和Bitly对象,它们都来自给定的个人:
person=person.objects.getname\uu-exact='BobSmith'
如何通过唯一URL字段选择嵌入到我的Person对象中的特定博客文章
作为权宜之计,我想我可以在我的person对象中迭代blog_post,如果blog_post.url与我的Bitly对象中的url匹配,我就可以更新转换为Bitly_链接字段,但我不确定这是最有效的方法
希望这是有意义的。我很高兴澄清,并提前感谢您的建议
Ben您可以使用位置运算符更新匹配的嵌入文档 这里有一个测试的例子https://github.com/MongoEngine/mongoengine/blob/master/tests/test_queryset.pyL313
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)
嗯。只需在[MangGDB和PyHON](1)中阅读第3章,我就意识到我应该考虑使用PyMunGo查询和原子更新我的DB。在我看来,语法比Mongongine的查询操作更容易阅读,特别是对于嵌入式文档。[1] 当前位置我会将此作为我的回答,但唉,stackoverflow还没有赋予我这种特权。非常感谢,罗斯。这很有帮助。我有很多关于MongoDB查询语言的知识需要学习。非常感谢!