在mongoengine中存档旧数据

lia*_*ker 7 python mongoengine

我有一个巨大的MongoDB数据库,由mongoengine驱动,其中的对象有一个日期.为了使工作更轻松,我想存档旧对象,但将它们保存在某处.

我一直在阅读文档,并碰上了switch_dbswitch_collection.但是,我不能做任何工作.

对于这两种情况,文档都引用了两种使用方案.

  1. 作为一项QuerySet行动:

    user = User.objects.get(id=user_id)
    user.switch_collection('old-users')
    user.save()
    
    Run Code Online (Sandbox Code Playgroud)

    这个问题是它只适用于单个对象.无法批量存档多个文档.

  2. 作为context_manager:

    with switch_collection(Group, 'group1') as Group:
    Group(name="hello testdb!").save()  # Saves in group1 collection
    
    Run Code Online (Sandbox Code Playgroud)

    使用此我甚至无法进行查询,收到以下错误:

    ValidationError (Document:None) (Field is required...
    
    Run Code Online (Sandbox Code Playgroud)

我已经尝试使用mongoengine搜索存档数据的方法,但似乎没有一个选项可行.你有什么建议吗?

oxy*_*r0n 0

如果您有权访问 MongoDB 实例本身,为什么不直接对其运行查询,而不是跳过 MongoEngine 的循环呢?

您可以使用以下命令重命名当前users集合users-old

http://docs.mongodb.org/manual/reference/command/renameCollection/

然后运行一个简单的脚本将新值复制到新users集合