【问题标题】:How to push on a EmbeddedDocument inside another EmbeddedDocument on MongoEngine?如何在 MongoEngine 上的另一个 EmbeddedDocument 中推送一个 EmbeddedDocument?
【发布时间】:2011-06-17 02:52:30
【问题描述】:

我的应用程序是一个简单的 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)

这样做的正确方法是什么?

【问题讨论】:

    标签: python orm mongodb mongoengine


    【解决方案1】:

    目前无法使用 MongoDB 或 MongoEngine。

    MongoEngine 的开发分支对the $ positional operator 有一些支持,但 MongoDB 仅支持每次更新使用一次位置运算符——也就是说,您不能使用它来更新嵌套在列表中的列表(即使是间接的,如您的示例)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      相关资源
      最近更新 更多