使用mongoimport导入Date-datatype

时间:2011-06-25 05:11:37

标签: mongodb mongoimport

我有很多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”?

4 个答案:

答案 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以供参考。