我想将一个新的ListField EmbeddedDocument附加到现有的ListField EmbeddedDocument文档中。换句话说,将新文档附加到属于列表中文档的列表中。
我的模型:帖子可以包含多个评论,每个评论可以有几个赞:
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)
我的代码:(它没有工作'append'命令不存在,只有'set'存在)
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)
评论?建议?
答案 0 :(得分:4)
您希望$push
列表中的新项目,例如:
Product.objects(comments__comment_id=target).update(
push__comments__S__likes=newLike)
然而,这里有更大的问题。架构并不理想 - 随着文档的增长,不断增长的阵列可能会导致问题,它必须在磁盘上移动到新的程度(因此它可以适应),如果它不断增长则会影响性能。
有关详细信息,请参阅data modeling docs。