10

新しい 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)

コメント? 提案?

4

1 に答える 1

5

リストに新しいアイテムを追加したい$push例:

Post.objects(comments__comment_id=target).update(
    push__comments__S__likes=newLike
)

ただし、ここにはさらに大きな問題があります。スキーマは理想的ではありません。アレイが大きくなると、ドキュメントが大きくなるにつれて問題が発生する可能性があります。ドキュメントが大きくなると、パフォーマンスに影響を与える可能性があります。

詳細については、データモデリングのドキュメントを参照してください。

于 2013-02-08T12:10:38.693 に答える