11

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

4 回答 4

21

实际上,即使有大量数据,第一个选项也相当快。这是使用 mongo 控制台的示例查询:

/usr/bin/mongo yourdbname --eval "db.yourcollectionname.find().forEach(function(doc){doc.yourdatefield = new ISODate(doc.yourdatefield);db.yourcollectionname.save(doc)});"
于 2013-02-14T13:55:24.077 回答
9

您的选择:

  • 将内容导入为 CSV 并将导入后的数据转换为 Date() (使用 mongo 控制台或使用您喜欢的语言编写的脚本)

  • 将您的数据导入为 JSON 并使用 $date 描述符将日期字符串转换为 Date 实例

于 2011-06-25T06:03:58.287 回答
2

使用您喜欢的语言编写脚本来导入数据。它将允许您控制数据类型并将结构更改应用于数据。

一般来说,从表格数据转换到文档数据库时,您会发现数据的映射是不一样的。

如果您编写脚本,您可能还希望支持运行多个副本(或线程)以提高导入速度。

于 2011-06-25T14:35:20.090 回答
2

如果可能,从源 CSV 重新导入应该更快。对于一个相对较大的数据集(130M 个对象,源 CSV ~6GB),mongoimport运行需要 40 分钟,但forEach@webDEVILopers 建议需要 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)(如上面的命令)。请参阅此内容以供参考。

于 2018-04-11T11:31:51.457 回答