【问题标题】:Which MongoDB types are not preserved by mongoimport/mongoexport?mongoimport/mongoexport 不保留哪些 MongoDB 类型?
【发布时间】:2019-06-12 04:21:43
【问题描述】:

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 整个集合,然后才能从头开始完全恢复它,这对于大型集合来说可能非常耗时,尤其是在需要重新创建文本索引的情况下。

【问题讨论】:

    标签: mongodb types mongoimport mongoexport


    【解决方案1】:

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

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

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

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

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

    warning will hopefully be removed soon

    【讨论】:

      猜你喜欢
      • 2022-12-15
      • 1970-01-01
      • 2012-08-17
      • 2014-02-22
      • 1970-01-01
      • 2015-05-30
      • 2018-02-09
      • 1970-01-01
      • 2017-10-07
      相关资源
      最近更新 更多