Как вставить EmbeddedDocument в другой EmbeddedDocument на MongoEngine? - PullRequest
3 голосов
/ 17 июня 2011

Мое приложение представляет собой простой список 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)

Какой правильный способ сделать это?

1 Ответ

2 голосов
/ 07 июля 2011

В настоящее время это невозможно, как с MongoDB, так и с MongoEngine.

В ветви разработки MongoEngine есть некоторая поддержка оператора позиционирования $ , но MongoDB поддерживает использование позиционного оператора только один раз за обновление, то есть его нельзя использовать для обновления списков, вложенных в списки (даже если косвенно, как в вашем примере).

Если вам необходимо выполнить атомарные обновления в списках задач, вам следует пересмотреть свою модель данных, чтобы разрешить это.

...