我的应用程序是一个简单的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)
这样做的正确方法是什么?
答案 0 :(得分:2)
目前无法使用MongoDB或MongoEngine。
MongoEngine的开发分支对the $ positional operator有一些支持,但MongoDB只支持每次更新使用位置运算符一次 - 也就是说你不能用它来更新嵌套在列表中的列表(即使是间接的,如在你的例子。)
如果您需要在待办事项列表上执行原子更新,则应重新考虑您的数据模型以允许此操作。