mongoimport/mongoexport 不保留哪些 MongoDB 类型?

Which MongoDB types are not preserved by mongoimport/mongoexport?

documentation for mongoexport 有这个可怕的警告,

Avoid using mongoimport and mongoexport for full instance production backups. They do not reliably preserve all rich BSON data types, because JSON can only represent a subset of the types supported by BSON. Use mongodump and mongorestore as described in MongoDB Backup Methods for this kind of functionality.

页面接着说,

To preserve type information, mongoexport and mongoimport uses the strict mode representation for certain types.

尽管 "strict mode representation",mongoexport 仍然不能正确表示的 types 到底是什么?

询问,因为 mongorestore 有一个非常烦人的限制:它 doesn't support an upsert option,这使得它无法用于同步仅更新少数文档的集合。在从头开始完全恢复之前,您必须 --drop 整个集合,这对于大型集合来说可能非常耗时,尤其是在需要重新创建文本索引的情况下。

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

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

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

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

等这些文档字段的文本表示由 mongoimport 解析,恢复原始类型。有关详细信息,请参阅 BSON Data Types and Associated Representations

warning will hopefully be removed soon.