我正在尝试定义对mongoengine中嵌入文档的列表字段执行检查和更新的方法。做我正在做的事情的正确方法是什么。代码如下。
class Comment(EmbeddedDocument):
created = DateTimeField()
text = StringField()
class Post(Document):
comments = ListField(EmbeddedDocumentField(Comment))
def check_comment(self, comment):
for existing_comment in self.comments:
if comment.created == existing_comment.created and
comment.text == existing_comment.text:
return True
return False
def add_or_replace_comment(self, comment):
for existing_comment in self.comments:
if comment.created == existing_comment.created:
# how do I replace?
# how do I add?
这甚至是正确的方法吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
您需要找到现有评论的索引。
然后,您可以使用新评论覆盖旧评论(其中 i 是索引),例如:
post.comments[i] = new_comment
然后只需执行post.save()
,mongoengine会将其转换为$set
操作。
或者,你可以写$set
例如:
Post.objects(pk=post.pk).update(set__comments__i=comment)