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

时间:2019-06-12 04:21:43

标签: mongodb types mongoimport mongoexport

documentation for mongoexport发出了这个可怕的警告,

  

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

页面然后继续说,

  

为保留类型信息,mongoexport和mongoimport对某些类型使用strict mode representation

尽管“严格模式表示”,mongoexport仍不能正确表示的types是什么?

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

1 个答案:

答案 0 :(得分:0)

原来,针对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