Mongoengine:如何将新文档附加到嵌入式ListField文档?
问题描述:
我想添加一个新的ListField EmbeddedDocument到现有的ListField EmbeddedDocument文档。换句话说,将新文档附加到属于列表中文档的列表。Mongoengine:如何将新文档附加到嵌入式ListField文档?
我的模型:一个帖子可以包含多个注释,每个注释可以有几个喜欢:
class Post(Document):
txt = StringField()
comments = ListField(EmbeddedDocumentField(Comment))
class Comment(EmbeddedDocument):
comment = StringField()
comment_id = ObjectIdField()
likes = ListField(EmbeddedDocumentField(Like))
class Like(EmbeddedDocument):
user = ReferenceField(User)
date = DateTimeField(default=datetime.utcnow,required=True)
我的代码:(它不工作“追加”命令这么想的存在,只有在“设置”存在)
def appendNewLike():
user = {..}
target = ObjectId(commentId)
newLike = Like(user=user)
Product.objects(comments__comment_id=target).update(append_comments__S__likes=newLike)
理想的解决办法是这样的:
def appendNewLike():
user = {..}
target = ObjectId(commentId)
newLike = Like(user=user)
Product.objects(comments__comment_id=target).comments.likes.append(newLike)
评论?建议?
答
你想$push
一个新的项目列表例如:
Product.objects(comments__comment_id=target).update(
push__comments__S__likes=newLike)
不过,也有更大的问题在这里。该模式并不理想 - 随着文档的增长,不断增长的数组可能会导致问题,如果不断增长,则会影响性能,因此它必须在磁盘上移动到新的范围(以便它可以适用)。
查看data modeling docs了解更多信息。
谢谢推$作品! – rat
你好,在我用类实例调用reload()之前,push不起作用。产品(Product.objects(comments__comment_id = target).update( push__comments__S__likes = newLike)product.reload() – Shashank