Mongoengine:如何将新文档附加到Embedded ListField文档?

rat*_*rat 9 append mongodb listfield mongoengine

我想将一个新的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)
Run Code Online (Sandbox Code Playgroud)

我的代码:(它没有工作'append'命令不存在,只有'set'存在)

def appendNewLike():
    user = {..}
    target = ObjectId(commentId)
    newLike = Like(user=user)
    Product.objects(comments__comment_id=target).update(append_comments__S__likes=newLike)
Run Code Online (Sandbox Code Playgroud)

理想的解决方案是:

def appendNewLike():
    user = {..}
    target = ObjectId(commentId)
    newLike = Like(user=user)
    Product.objects(comments__comment_id=target).comments.likes.append(newLike)
Run Code Online (Sandbox Code Playgroud)

评论?建议?

Ros*_*oss 5

您想$push在列表中添加一个新项目,例如:

Post.objects(comments__comment_id=target).update(
    push__comments__S__likes=newLike
)
Run Code Online (Sandbox Code Playgroud)

然而,这里有更大的问题。架构并不理想 - 随着文档的增长,不断增长的数组可能会导致问题,它必须在磁盘上移动到新的范围(以便它可以适应),如果它不断增长,那么这将影响性能。

有关更多信息,请参阅数据建模文档