【问题标题】:Django + MongoDB using mongodb-engine gives multipleobjectreturned使用 mongodb-engine 的 Django + MongoDB 返回了多个对象
【发布时间】:2011-10-01 19:20:13
【问题描述】:

当我访问 localhost:8000/admin 时出现错误 'MultipleObjectsReturned 在 /admin/ get() 返回了多个 Session —— 它返回了 2!查找参数为 {'session_key': 'ee5a8be487352e42a89f962ee4ab22a6', 'expire_date__gt': datetime.datetime(2011, 7, 8, 5, 38, 36, 645053)}'

如果访问 mongodb 并删除集合 django_session 中的一个行,它可以工作,但过了一会儿给了我同样的错误,因为它是在集合 django_session 中创建的另一个文档

更新:即使在浏览器中我删除了存储会话 ID 的 cookie,我也能够顺利运行页面。然后当我刷新或单击链接时,我会收到多对象返回错误。

这是 mongodb-engine for django 的问题,它尝试为每次页面刷新添加会话 ID。

【问题讨论】:

    标签: django session mongodb pymongo


    【解决方案1】:

    默认情况下,MongoDB 在_id 字段上创建唯一索引。但是,您似乎正在使用 session_key 字段,默认情况下它不是唯一的,这可以解释您如何获得两个条目。

    查看正在使用的索引:./mongo localhost:8000/admin --eval "db.system.indexes.find()",看看这是否不仅仅是索引问题。有关创建唯一索引的信息是here。

    您可能还想查看创建django_session 文档的代码。他们可能正在做一些“不太正确”的事情导致错误。

    【讨论】:

      【解决方案2】:

      我联系了负责 django-mongodb-engine 的作者,他错过了将 django.contrib 库(django 的管理库属于其中。)添加到测试中。他添加了修复程序,现在您可以通过该修复程序访问管理员而不会收到 mulipleobjectreturned 错误。

      这是解决问题的提交 (https://github.com/django-mongodb-engine/mongodb-engine/issues/53):https://github.com/django-mongodb-engine/mongodb-engine/commit/a0ab9c3f7c378828c2800b8f62f67c8e21255835

      希望这对其他人有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-14
        • 1970-01-01
        • 2018-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多