如何在 MongoEngine 上将一个 EmbeddedDocument 推送到另一个 EmbeddedDocument 中?

发布于 2024-11-16 00:25:08 字数 927 浏览 2 评论 0原文

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

哪种方法是正确的?

My application is a simple TODO list, this are my classes with 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))

I push to the User lists with...

list = List()
list.name = request.form['name']
list.slug = slugify(request.form['name'])
User.objects(twitter=session['username']).update_one(push__lists=list)

The logic is that the user have multiple lists and each lists can have multiple tasks.

Now I want to push a task in certain list, but I can't find the way with MongoEngine. The approach could be some like this:

User.objects(twitter=session['username']).update_one(push__lists__listname__task=list)

Which is the correct way of doing this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小巷里的女流氓 2024-11-23 00:25:08

目前无论使用 MongoDB 还是 MongoEngine,这都是不可能的。

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

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

This isn't currently possible, either with MongoDB or MongoEngine.

The development branch of MongoEngine has some support for the $ positional operator, but MongoDB only supports using the positional operator once per update -- that is you cannot use it to update lists nested within lists (even if indirectly, as in your example).

If you need to perform atomic updates on the todo lists, you should reconsider your data model to allow this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文