1

以下があるとしましょう。

class Post(Document):
    uid = StringField(required=True, unique=True)
    text = StringField(required=True
    comments = EmbeddedDocumentListField(Comment)

class Comment(EmbeddedDocument):
    comment_id = StringField(required=True)
    comment = StringField(required=True)
    datetime = DatetimeField()

したがって、コメントなしで投稿を保存しました。各投稿は一意です。

次に、コメント オブジェクトのリストを取得します。それらを1つずつ保存するためにforループを実行するか、コメントオブジェクトのリストを作成して一度更新したいと思います。

また、これらの Comment オブジェクトのいくつかが既にPost.comment リスト フィールドにあるかどうかを確認したいと思います。

私が試してみました

        for comment in comments:

            o_comment = Comment()
            o_comment.id = comment.get('id')
            o_comment.comment = comment.get('comment')
            o_comment.datetime = datetime.now()
            Post.objects(uid = 'some_id').update_one(push__comments = o_comment)

したがって、これは機能しますが、チェックせずにドキュメントを追加します。そのため、何度も実行すると重複します。

何か案が ?再度、感謝します。

4

1 に答える 1

1

使用してみてくださいupdate_one(add_to_set__comments = <list_of_comments>)

comment1 = Comment(comment_id='1', comment='comment1', datetime=datetime.datetime.now())
comment2 = Comment(comment_id='2', comment='comment2', datetime=datetime.datetime.now())
comment3 = Comment(comment_id='3', comment='comment3', datetime=datetime.datetime.now())

comments1=[comment1, comment2]
comments2=[comment2, comment3]


Post.objects(uid = post.uid).update_one(add_to_set__comments = comments1)    
Post.objects(uid = post.uid).update_one(add_to_set__comments = comments2)

これら 2 つの更新により、comments1リストとcomments2リストの各ドキュメントがセットで追加されるため、comment22 回追加されることはありません。

于 2016-12-12T11:47:38.083 に答える