首页 > 解决方案 > mongoimport/mongoexport 不保留哪些 MongoDB 类型?

问题描述

文档mongoexport有这个可怕的警告,

避免使用 mongoimport 和 mongoexport 进行完整实例生产备份。它们不能可靠地保留所有丰富的BSON数据类型,因为JSON只能表示 BSON 支持的类型的子集。使用 MongoDB 备份方法中所述的 mongodump 和 mongorestore 来实现此类功能。

然后页面继续说,

为了保留类型信息,mongoexport 和 mongoimport 对某些类型使用严格模式表示

尽管有“严格模式表示”,但 mongoexport 仍然不能正确表示的类型到底是什么?

询问 becausemongorestore有一个非常烦人的限制:它不支持upsertoption,这使得它无法用于同步只有少数文档更新的集合。您必须--drop先恢复整个集合,然后才能从头开始完全恢复它,这对于大型集合来说可能非常耗时,尤其是在需要重新创建文本索引的情况下。

标签: mongodbtypesmongoimportmongoexport

解决方案


事实证明,针对 mongoimport/export 的警告已过时。使用 mongodump/restore 来提高速度仍然是一个好主意,但是mongoexport 使用MongoDB Extended JSON format保留类型信息。例如,日期字段不再静默转换为文本,而是:

{ "$date": "<date>" }

<date>日期的 ISO-8601YYYY-MM-DDTHH:mm:ss.mmm<+/-Offset>表示在哪里。正则表达式转换为

{ "$regex": "<sRegex>", "$options": "<sOptions>" }

等。这些文档字段的文本表示由 mongoimport 解析,恢复原始类型。有关详细信息,请参阅BSON 数据类型和相关表示

警告有望很快被删除


推荐阅读