使用 mongoexport 或 mongodump 备份?

How*_*Lee 9 mongodb backup

对于生产备份,MongoDB 建议使用mongodump而不是mongoexport以确保数据的准确性。但是,在备份之前,我需要从 MongoDB 数据库中“清除”数据。我不知道除mongoexport之外的任何服务器端数据清理选项。两个问题:

  1. mongoexport是否访问 RAM 中的 MongoDB 缓存?它会像mongodump那样改变 RAM 中的工作集吗?
  2. mongodump命令有这个--query选项。“提供一个 JSON 文档作为查询,可以选择性地限制 mongodump 输出中包含的文档。” 排除文档中的某些字段是否需要查询?

ald*_*win 6

  1. (对不起,不知道)

  2. --query将选择或排除整个文档,而不是字段。

不过,这将是一个好主意:

--query '{datetime:{$gt:ISODate("2014-01-01T00:00:00.000Z")}},{_id:0,name:1,address:1,interests:1}'* )
Run Code Online (Sandbox Code Playgroud)
  1. Mongodump使用 bson 文件结构并保留数据类型Mongoexport丢失值的数据类型。例如 NumberLong("1431677405876") 将被转换为仅 1431677405876。这就是为什么如果您需要导入回 MongoDB 建议使用 mongodump。


Ada*_*m C 6

作为第一个问题的答案,这两个工具(默认情况下)只会遍历_id索引以获取数据,然后将其写入磁盘。所以,是的,这两种工具都会类似地影响您的工作集,这就是为什么我通常建议在辅助(如果可能的话,最好是隐藏的辅助)上运行它们。如果您正在处理大量数据,我将在此处的评论中回应 Stennie,并推荐其他备份方法。

对于第二个问题,我假设您正在寻找mongodump--fieldsfrommongoexport仅转储特定字段的选项等效的选项。该查询选项可以用来筛选结果,但它无法与投影使用(选择返回的字段) -这是正在跟踪的功能要求TOOLS-28,但还没有计划。正如 Stennie 还提到的,这里的另一个选择是编写一个适合您需求的自定义导出器(同样,我仍然建议在辅助设备上运行它以保护您的工作集)。