我有很多GB数据存储在PostgreSQL数据库中,我需要将它们导入到MongoDB中。我是使用CSV导出和mongoimport完成的。
在这个CSV中有像这样的'2011-06-25'列,它已被导入为字符串,而不是MongoDate,因此我无法按日期进行有效搜索。
我发现了这个:http://www.mongodb.org/display/DOCS/Import+Export+Tools#ImportExportTools-Example%3AImportingInterestingTypes 但是例子说,我需要为文件使用JSON结构。我真的需要从PostgreSQL导出JSON文件吗?
如果我这样做 - 怎么做?
如果不是,如何通过CSV导出“MongoDate”?
答案 0 :(得分:19)
实际上即使有大量数据,第一个选项也相当快。以下是使用mongo控制台的示例查询:
/usr/bin/mongo yourdbname --eval "db.yourcollectionname.find().forEach(function(doc){doc.yourdatefield = new ISODate(doc.yourdatefield);db.yourcollectionname.save(doc)});"
答案 1 :(得分:9)
您的选择:
将内容导入为CSV并将导入后的数据转换为Date()(使用mongo控制台或使用您喜欢的语言编写的脚本)
将您的数据导入为JSON并使用$ date描述符将日期字符串转换为日期实例
答案 2 :(得分:2)
使用您喜欢的语言编写脚本以导入数据。它还允许您控制数据类型并对数据应用结构更改。
通常,当从表格数据转换为文档数据库时,您会发现数据的映射不同。
如果您编写脚本,您可能还希望支持运行多个副本(或线程)以提高导入速度。
答案 3 :(得分:1)
如果可能,从源CSV重新导入应该更快。对于相对较大的数据集(130M对象,源CSV~6GB),mongoimport
运行需要40分钟,但@webDEVILopers建议的forEach
需要24小时+(此时我取消了它)。
要从CSV导入并转换日期,我运行了
mongoimport --db your-db-name --type csv --file your-file.csv --collection your-collection --fields timestamp.date\(2006-01-02\ 15:04:0
5.00000+00\),count.int32\(\), --columnsHaveType
.date()
部分很棘手,您 以源格式指定该特定日期。所以我的时间戳就像" 2018-02-03 12:09:23.00000 + 00",这意味着以该格式格式化参考日期(2006年1月2日15:04:05)(如上面的命令)。请参阅this以供参考。