3

私のアプリケーションは単純な TODO リストです。これは MongoEngine を使用した私のクラスです...

class Task(EmbeddedDocument):
    content = StringField()
    slug = StringField()
    position = IntField()
    priority = IntField()
    status = IntField()

class List(EmbeddedDocument):
    name = StringField()
    slug = StringField()
    tasks = ListField(EmbeddedDocumentField(Task))

class User(Document):
    email = StringField()
    twitter = StringField()
    lists = ListField(EmbeddedDocumentField(List))

私はユーザーリストにプッシュします...

list = List()
list.name = request.form['name']
list.slug = slugify(request.form['name'])
User.objects(twitter=session['username']).update_one(push__lists=list)

ロジックは、ユーザーが複数のリストを持ち、各リストに複数のタスクを含めることができるというものです。

特定のリストでタスクをプッシュしたいのですが、MongoEngine で方法が見つかりません。アプローチは次のようになります。

User.objects(twitter=session['username']).update_one(push__lists__listname__task=list)

これを行う正しい方法はどれですか?

4

1 に答える 1

2

これは現在、MongoDB または MongoEngine では不可能です。

MongoEngine の開発ブランチは$ positional operator をある程度サポートしていますが、MongoDB は更新ごとに 1 回のみ位置演算子の使用をサポートしています。つまり、リスト内にネストされたリストを更新するために使用することはできません (例のように間接的であっても)。

Todo リストでアトミックな更新を実行する必要がある場合は、これを許可するようにデータ モデルを再検討する必要があります。

于 2011-07-07T13:37:58.883 に答える