#python #mongoengine
#python #mongoengine
Вопрос:
У меня есть огромная база данных MongoDB, основанная на mongoengine, где объекты имеют дату. Чтобы упростить работу, я хочу архивировать старые объекты, но хранить их где-нибудь.
Я читал документацию и наткнулся switch_db
на и switch_collection
. Однако я не могу заставить ни то, ни другое работать.
В обоих случаях документация ссылается на два сценария использования.
- В качестве
QuerySet
операции:user = User.objects.get(id=user_id) user.switch_collection('old-users') user.save()
Проблема в том, что это работает только для отдельного объекта. Невозможно выполнить пакетное архивирование нескольких документов.
- В качестве
context_manager
:with switch_collection(Group, 'group1') as Group: Group(name="hello testdb!").save() # Saves in group1 collection
Используя это, я даже не могу выполнить запрос, получая следующую ошибку:
ValidationError (Document:None) (Field is required...
Я пытался найти способ архивирования данных с помощью mongoengine, но, похоже, ни один из вариантов не работает. У вас есть предложения?
Комментарии:
1. попробуйте поместить:
from models import Doc
в ваш архивный скрипт2. Спасибо, после исправления этой ошибки я получаю новую, я думаю, мне нужно подключиться к новой базе данных, но ничего не нашел об этом в документах.
3. Вы пытались проверить, успешно ли подключается строка connect (‘doc-archive’) к mongodb?
4. @VictorH. Паниса, как я могу это проверить?
5. @liarspocker смотрите документ по API, docs.mongoengine.org/apireference.html#api-reference вероятно, вы не зарегистрировали псевдоним соединения, подробности см. в разделе mongoengine.register_connection
Ответ №1:
Если у вас есть доступ к самому экземпляру MongoDB, почему бы просто не выполнить запрос непосредственно к нему, вместо того, чтобы прыгать через обручи MongoEngine?
вы можете переименовать свою текущую users
коллекцию в с users-old
помощью этой команды:
http://docs.mongodb.org/manual/reference/command/renameCollection/
а затем запустите простой скрипт для копирования новых значений в новую users
коллекцию