9

我在 mongoengine 有一堂课

class Post(EmbeddedDocument):
        uid = StringField(required=True)
        text = StringField(required=True)
        value = StringField()

class Feed(Document):
        label = StringField(required=True)
        feed_url = StringField(required=True)
        posts = ListField(EmbeddedDocumentField(Post))

我正在尝试从某个“父”文档中更新 Post EmbeddedDocument 属性名称文本。作为第一步,我检索提要文档

model = Feed.objects(_id="....").first()

然后我想更新嵌入文档“Post”的属性文本。

如何使用 mongoengine 实现它?谢谢

4

3 回答 3

8

我解决了:)

Feed.objects(_id="...", posts__text="findvalue").update(set__posts__S__value="updatevalue")
于 2013-01-05T10:27:24.423 回答
0

如果我理解这个问题,我认为这样的事情会起作用:

model = Feed.objects(_id="....").first()
for post in model.posts:
    if post.text == "title":
        post.value = "placeholder for real update"
model.save()
于 2013-01-05T10:13:16.720 回答
0

扩展@hoangvu68 的答案。这是另一个例子:https ://gist.github.com/pingwping/92219a8a1e9d44e1dd8a

格式为:

MyModel.objects.find(<model-key> = <model-val>, <embedded-doc-key>__<embedded-doc-lookup-key>=<lookup-key-val>).update(set__<embedded-doc-key>__S__<embedded-doc-lookup-key> = <new-val>)

请注意,这可以分为 2 行

doc = MyModel.objects.find(<model-key> = <model-val>, <embedded-doc-key>__<embedded-doc-lookup-key> = <lookup-key-val>)
doc.update(set__<embedded-doc-key>__S__<embedded-doc-lookup-key> = <new-val>)
于 2020-09-06T04:08:57.503 回答