Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在MongoEngine中对列表字段中的嵌入文档进行原子更新?_Python_Mongodb_Mongoengine - Fatal编程技术网

Python 如何在MongoEngine中对列表字段中的嵌入文档进行原子更新?

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

我在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获得的数据与数据库中相应的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查询语言的知识需要学习。非常感谢!