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))

特定の「親」ドキュメントからPostEmbeddedDocumentプロパティ名のテキストを更新しようとしています。最初のステップとして、フィードドキュメントを取得します

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 に答える