如何推入MongoEngine上另一个EmbeddedDocument中的EmbeddedDocument?

问题描述:

我的应用程序是一个简单的待办事项清单,这是我的班,MongoEngine ...如何推入MongoEngine上另一个EmbeddedDocument中的EmbeddedDocument?

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) 

这是这样做的正确方法?

目前无法使用MongoDB或MongoEngine。

MongoEngine的开发分支有the $ positional operator一定的支撑,但MongoDB中仅支持每个更新使用了该位置操作一次 - 那是你不能用它来更新嵌套的列表中列出了(即使是间接的,因为在你的例子) 。

如果您需要对待办事项列表执行原子更新,则应重新考虑您的数据模型以允许执行此操作。