Архивировать старые данные в mongoengine

#python #mongoengine

#python #mongoengine

Вопрос:

У меня есть огромная база данных MongoDB, основанная на mongoengine, где объекты имеют дату. Чтобы упростить работу, я хочу архивировать старые объекты, но хранить их где-нибудь.

Я читал документацию и наткнулся switch_db на и switch_collection . Однако я не могу заставить ни то, ни другое работать.

В обоих случаях документация ссылается на два сценария использования.

  1. В качестве QuerySet операции:
     user = User.objects.get(id=user_id)
    user.switch_collection('old-users')
    user.save()
     

    Проблема в том, что это работает только для отдельного объекта. Невозможно выполнить пакетное архивирование нескольких документов.

  2. В качестве 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 коллекцию