【问题标题】:Archive old data in mongoengine在 mongoengine 中归档旧数据
【发布时间】:2023-04-10 12:27:02
【问题描述】:

我有一个由 mongoengine 提供支持的巨大 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 存档数据的方法,但似乎没有一个选项有效。你有什么建议吗?

【问题讨论】:

  • 尝试将:from models import Doc 放入您的存档脚本中
  • 谢谢,在修复了这个错误后我得到了一个新的,我想我需要连接到一个新的数据库,但在文档中没有找到任何相关信息。
  • 你试过测试connect('doc-archive')这行是否成功到达mongodb?
  • @VictorH.Panisa 我该如何测试?
  • @liarspocker 参见 API 文档,docs.mongoengine.org/apireference.html#api-reference 你可能没有注册连接别名,详情参见 mongoengine.register_connection

标签: python mongoengine


【解决方案1】:

如果您可以访问 MongoDB 实例本身,为什么不直接对其运行查询,而不是跳过 MongoEngine 的圈子?

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多