在什么情况下可以使用mongoexport?

时间:2017-06-27 12:01:03

标签: json mongodb bson mongoexport

来自documentation,它说要避免使用BSON数据类型的mongoexport

  

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

创建名为“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
}

执行以下命令将type作为object和String,

  

typeof db.testCollection.findOne()._ id; 输出:对象

     

typeof db.testCollection.findOne()。title; 输出:字符串

如果在上面的集合上运行mongoexport可能会或可能不会保证数据的保存,因为它包含数据类型字符串和对象。 (我怀疑任何文档都没有string,objectID数据类型)

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

中的mongoexport

我的问题是

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

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

2 个答案:

答案 0 :(得分:0)

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

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

要可靠地备份/恢复数据 ,请使用mongodump / mongorestore。

  

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

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

答案 1 :(得分:0)

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

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