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)
评论?建议?
您想$push在列表中添加一个新项目,例如:
Post.objects(comments__comment_id=target).update(
push__comments__S__likes=newLike
)
Run Code Online (Sandbox Code Playgroud)
然而,这里有更大的问题。架构并不理想 - 随着文档的增长,不断增长的数组可能会导致问题,它必须在磁盘上移动到新的范围(以便它可以适应),如果它不断增长,那么这将影响性能。
有关更多信息,请参阅数据建模文档。
| 归档时间: |
|
| 查看次数: |
4928 次 |
| 最近记录: |