在mongoengine中归档旧数据

8 投票
1 回答
523 浏览
提问于 2025-04-18 10:46

我有一个很大的MongoDB数据库,里面的对象都有日期。为了方便管理,我想把旧的对象归档,但又想把它们保留在某个地方。

我在看文档的时候发现了switch_dbswitch_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 个回答

0

如果你能直接访问MongoDB数据库,那为什么不直接在上面执行查询,而要通过MongoEngine这个工具呢?

你可以用这个命令把现在的 users 数据表重命名为 users-old

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

然后再运行一个简单的脚本,把新的数据复制到一个新的 users 数据表里。

撰写回答