如何在MongoEngine中向另一个EmbeddedDocument内的EmbeddedDocument推送数据?
我的应用程序是一个简单的待办事项列表,这里是我用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
目前,这个操作在MongoDB或MongoEngine中都不支持。
MongoEngine的开发版本对$位置操作符有一些支持,但MongoDB只允许每次更新时使用一次位置操作符。这意味着你不能用它来更新嵌套在列表中的列表(即使是间接的,像你举的例子那样)。
如果你需要对待办事项列表进行原子更新(也就是确保更新的完整性),你应该重新考虑一下你的数据模型,以便支持这种操作。