Django + MongoDB с использованием движка mongodb возвращает несколько объектов

когда я получаю доступ к localhost: 8000/admin, выдает ошибку «MultipleObjectsReturned at /admin/get() вернул более одного сеанса — он вернул 2! Параметры поиска: {'session_key': 'ee5a8be487352e42a89f962ee4ab22a6', 'expire_date__gt': datetime.datetime(2011, 7, 8, 5, 38, 36, 645053)}'

если получить доступ к mongodb и удалить одну из строк в коллекции django_session, это работает, но через некоторое время выдает ту же ошибку, потому что был создан другой документ в коллекции django_session

обновление: даже в браузере я удалил файл cookie, в котором хранился идентификатор сеанса, после чего я смог плавно запустить страницу. затем, когда я обновляю или нажимаю на ссылку, я получаю ошибку возврата нескольких объектов.

это проблема с движком mongodb для django, который пытается добавить идентификаторы сеанса для каждого обновления страницы.


person web_ninja    schedule 09.07.2011    source источник


Ответы (2)


По умолчанию MongoDB создает уникальный индекс для поля _id. Однако похоже, что вы используете поле session_key, которое по умолчанию не является уникальным, что может объяснить, как вы получаете две записи.

Взгляните на используемые индексы: ./mongo localhost:8000/admin --eval "db.system.indexes.find()" и убедитесь, что это не просто проблема с индексами. Информация о создании уникальных индексов находится здесь.

Вы также можете взглянуть на код, который создает django_session документы. Возможно, они делают что-то «не совсем правильно», что и вызывает ошибку.

person Gates VP    schedule 10.07.2011

Я связался с автором, отвечающим за 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

Надеюсь, это поможет кому-то еще.

person web_ninja    schedule 12.07.2011