假设我们有以下内容。
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()
因此,我们已经保存了没有任何评论的帖子。每个帖子都是唯一的。
然后,我有一个Comments对象列表。我想做一个for循环,以一次一个地保存它们,或创建一个注释对象列表并更新一次。
另外,我想检查Post.comment列表字段中是否已经有一些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)
因此,这可行,但是它会附加文档而不进行检查。因此,如果我多次运行它,则会得到重复。
任何想法 ?再次感谢。
尝试使用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
列表中的一个文档,因此comment2
不会被添加两次。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句