将 .csv 文件导入 mongodb

Posted

技术标签:

【中文标题】将 .csv 文件导入 mongodb【英文标题】:Import .csv file into mongodb 【发布时间】:2013-07-02 03:06:31 【问题描述】:

我正在尝试将数据从 csv 文件导入到 mongodb

具有以下数据的 CSV 文件

7259555112 774561213 3 4

7259555112 774561214 4 5

7259555112 774561215 1 3

7259555112 774561216 2 1

7259555112 774561217 4 2

7259555112 774561218 6 1

7975795117 7599702622 3 2

7975795117 7599702623 2 1

其中第一个数字是 MISDIN(cell_number), 秒号是 MISDIN 第三个字段是第一个 MISDIN 从第二个获得的 mnay 传入 第四个字段是从第一个到第二个有多少支出

我想把它导入到我需要收集的 mongodb 架构如下

7259555112(first_doucment 我想将第一个 Misdin 作为索引)

MSISDN:774561213

incoming_count:4

outgoing_count:3

total_count:7

is_EE:1

,

MSISDN:774561214

incoming_count:3

outgoing_count:2

total_count:5

is_EE:1

,

MSISDN:774561215

incoming_count:1

outgoing_count:2

total_count:3

is_EE:0

7975795117(第二份文件)

MSISDN:7599702622

incoming_count:3

outgoing_count:2

total_count:5

is_EE:1

,

MSISDN:7599702623

incoming_count:2

outgoing_count:1

total_count:3

is_EE:1

,

请指导如何使用 mongoimport 或任何其他工具来实现这一目标

谢谢

【问题讨论】:

您在使用命令行工具mongoimport时遇到什么问题? 使用 mongoimport,您可以指定在文件中查找描述您正在导入的字段的标题行,或者指定包含字段描述的单独文件。查看帮助 【参考方案1】:

如果我理解正确,您需要为第一列中的每个唯一 MISDIN 提供一个文档,每个文档在第二列中的每个 MISDIN 都有一个子文档,第一个 MISDIN 具有传入/传出呼叫。因此,对于您提供的数据,集合中的文档将如下所示:

 _id: ObjectId("5237258211f41a0c647c47b1"),
  MISDIN_mine: 7259555112,
  call_records: [
   MISDIN_theirs: 774561213,
    incoming_count: 3,
    outgoing_count: 4,
    total_count: 7,
    is_EE: 1
  , 
   MISDIN_theirs: 774561214,
    incoming_count: 4,
    outgoing_count: 5,
    total_count: 9,
    is_EE: 1
   
  ... ]

诚然,我不确定is_EE 应该代表什么,但让我们把剩下的放在适当的位置。

为了以您想要的格式导入数据,首先在您的 CSV 文件中添加一个标题(顶部的一行),如下所示:

MISDIN_mine,MISDIN_theirs,incoming_count,outgoing_count
7259555112,774561213,3,4
7259555112,774561214,4,5
...

并按如下方式运行 mongoimport:

mongoimport --db yourdb --collection celldata --type csv --file path/to/file.csv --headerline

现在,如果您查看 celldata 集合,您会注意到文档实际上是这样的:

 _id: ObjectId("5237258211f41a0c647c47b1"),
  MISDIN_mine: 7259555112,
  MISDIN_theirs: 774561213,
  incoming_count: 3,
  outgoing_count: 4

下一步是将总计数字段添加到子文档。 (不过,老实说,如果您可以在 Excel 或类似程序中打开您的 csv 文件并在那里进行计算,为 total_count 添加另一列,这对您来说可能更容易。)否则,您可以使用 @987654321 @。

db.celldata.find().forEach(function(myDoc)  db.cell.update(_id:myDoc._id,$set:"total_count":myDoc.incoming_count+myDoc.outgoing_count));

现在,您的文档应该如下所示:

 _id: ObjectId("5237258211f41a0c647c47b1"),
  MISDIN_mine: 7259555112,
  MISDIN_theirs: 774561213,
  incoming_count: 3,
  outgoing_count: 4,
  total_count: 7

您现在可以添加 is_EE 字段。现在,开始将这些文档转换为子文档!我们将使用聚合,特别是group command,来

var reduce = function(curr, result) 
  result.call_records.push(
     
      MISDIN_theirs: curr.MISDIN_theirs,
      incoming_count: curr.incoming_count,
      outgoing_count: curr.outgoing_count,
      total_count: curr.total_count,
      is_EE: curr.is_EE          
    ); 
;

db.new_celldata.insert(db.celldata.group(key: "MISDIN_mine": 1, reduce: reduce, initial: call_records:[]))

现在我们有了一个集合 new_celldata,其中的数据看起来像我们想要的那样!最后,最后一步是在 MISDIN_mine 上创建索引。

db.new_celldata.ensureIndex(MISDIN_mine: 1);

现在,您可以使用 new_celldata 集合来解决您正在处理的任何问题。 :)

【讨论】:

以上是关于将 .csv 文件导入 mongodb的主要内容,如果未能解决你的问题,请参考以下文章

mongodb mongoimport导入CSV文件

mongodb导入csv文件时出错

excl数据怎么导入到MongoDB中,或者怎样将excl处理在导入到数据库中,数据量有4万条

MongoDB csv文件导入导出

MongoDB大数据高并发读写性能测试报告

将Mongodb部分数据导入mysql数据库