什么情况下可以使用mongoexport?

In what cases mongoexport can be used?

来自documentation,它说要避免在 BSON 数据类型上进行 mongoexport

WARNING 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.

创建了一个名为“testCollection”的集合

 > db.testCollection.insert({title: 'MongoDB Overview',
... description: 'MongoDB is magical database',
...    by: 'by newbie',
...    url: 'http://www.mongodb_cannot_understand_mongoexport.com',
...    tags: ['mongodb', 'database', 'NoSQL'],
...    likes: 100});

> db.testCollection.find().pretty();
{
    "_id" : ObjectId("59524e6412d3ef3c879c267a"),
    "title" : "MongoDB Overview",
    "description" : "MongoDB is magical database",
    "by" : "by newbie",
    "url" : "http://www.mongodb_cannot_understand_mongoexport.com",
    "tags" : [
        "mongodb",
        "database",
        "NoSQL"
    ],
    "likes" : 100
}

执行以下命令将类型作为对象和字符串,

typeof db.testCollection.findOne()._id; output : object

typeof db.testCollection.findOne().title; output : string

If 运行 以上集合的 mongoexport 可能会也可能不会保证数据的保存,因为它包含数据类型字符串和对象。 (我怀疑任何文件都不会有字符串,objectID 数据类型)

在那种情况下,根本不应该使用 this list of bson types link description here

的 mongoexport

我的问题是

在什么情况下 mongoexport 可以与示例集合一起使用?

注意: 我想使用 mongoexport,mongodump 不是一个选项

文档中该段的意思是,使用 mongoexport/mongoimport,无法保证恢复的数据库中的数据将与原始来源中的数据完全匹配.这是因为 JSON 本身不支持许多 BSON 数据类型,例如 Date、MinKey、ObjectId 等。因此 mongoexport 必须采取变通办法至少导出 something那些类型。这是它导出 ObjectId 字段的方式,例如:

"_id": {"$oid": "531701fdb9e3b40002000002"}

为了backup/restore你的数据可靠,使用mongodump/mongorestore。

In what cases mongoexport can be used with a example collection ?

当您想获得某种程度上 人类可读的数据快照时。 JSON 在大多数语言中也得到很好的支持,因此您可以使用 mongoexport 转储数据以使用 python 的科学库或类似的东西进行处理。

那个警告实际上已经过时了!我刚刚开始与 MongoDB 团队进行讨论,他们正计划 remove it

Mongoexport 现在使用 来保留类型信息。