Arrays 将.csv导入MongoDB,创建包含对象的数组

Arrays 将.csv导入MongoDB,创建包含对象的数组,arrays,mongodb,csv,object,import,Arrays,Mongodb,Csv,Object,Import,我开始熟悉MongoDB,现在我必须将一个相对较大的.csv文件导入Mongo集合。到目前为止,我能够导入.csv文件而没有大问题(使用mongoimport或通过Studio 3T)。但是,我想为每个特定文档创建一些数组。也许通过举例说明我的数据,我可以让它更清楚 worker_id | gender | birth | employer_id | start | end | type | ----------------------------------------

我开始熟悉MongoDB,现在我必须将一个相对较大的.csv文件导入Mongo集合。到目前为止,我能够导入.csv文件而没有大问题(使用mongoimport或通过Studio 3T)。但是,我想为每个特定文档创建一些数组。也许通过举例说明我的数据,我可以让它更清楚

worker_id | gender | birth | employer_id | start     | end       | type   |
---------------------------------------------------------------------------
CAD1213   | M      | 1990  | WRF1119     | 15jun2018 | 31dec2018 | 11.1.1 |
CAD1213   | M      | 1990  | WAC1134     | 1jan2019  | 31dec2019 | 12.1.1 |
CAF1456   | F      | 1972  | WAC1134     | 15aug1988 | 17sep2016 | 55.0.1 |
CAR5567   | F      | 1991  | WER9280     | 15jun2018 | 31dec2018 | 1.1.1  |
CAR5578   | F      | 1989  | WHI1176     | 15jun2011 | 1nov2011  | 12.2.5 |
CAR5578   | F      | 1989  | WHI1176     | 2nov2011  | 31dec2012 | 12.2.5 |
这只是一个字段(列)很少的示例。我有工作合同的数据,其中:工人id是工人的身份,性别,出生是工人的出生年份,雇主id是每个雇主的身份,开始和结束是每个具体工作合同的开始和结束,而类型是具体工作合同。整个数据库显然具有更多字段的特征

使用classic.csv导入,对于每一行,我将获得一个具有特定ID的不同文档,每一列将表示字段。但是,我希望将worker_id的值设为“_id”(虽然不一定)。如您所见,某些worker_id在列中重复(在一个超过1700万行的文件中,您可以想象我可以拥有多少个副本),因此无法将此字段选为_id

这就是我努力想要得到的。我想创建一个数组(例如称为contracts),其中包含每个特定contract的信息,因此是对象,在本例中是列employer\u id、start、end和type。对于某些worker,数组中只有一个元素(示例中为CAF1456和CAR5567),而对于其他worker,则有多个元素(示例中为CAD1213和CAR5578)。因此,假设性文件如下所示:

_id: "CAD1213"
gender: "M"
birth: "1990"
contracts: Array
  0: Object
     employer_id: "WRF1119"
     start: "15jun2018"
     end: "31dec2018"
     type: "11.1.1"
  1: Object  
     employer_id: "WAC1134"
     start: "1jan1988"
     end: "31dec2019"
     type: "12.1.1"

_id: "CAF1456"
gender: "F"
birth: "1972"
contracts: Array
  0: Object
     employer_id: "WAC1134"
     start: "15aug1988"
     end: "17sep2016"
     type: "55.0.1"

_id: "CAR5567"
gender: "F"
birth: "1991"
contracts: Array
  0: Object
     employer_id: "WER9280"
     start: "15jun2018"
     end: "31dec2018"
     type: "1.1.1"

_id: "CAR5578"
gender: "F"
birth: "1989"
contracts: Array
  0: Object
     employer_id: "WHI1176"
     start: "15jun2011"
     end: "1nov2011"
     type: "12.2.5"
  1: Object  
     employer_id: "WHI1176"
     start: "2nov2011"
     end: "31dec2012"
     type: "12.2.5"
据我所知,这个过程不能直接用mongoimport执行,那么它必须在导入整个.csv文档之后执行(我猜)。我希望有人能给我一些提示,建议或链接,我可以找到一些帮助实现这一结构。此外,如果文件的其他结构更适合我的例子,我很想知道


先谢谢你。

想一想。最终数据模型应驱动CSV文件的整个导入过程。mongoimport具有仅导入字段子集的选项;您还可以将数据导入多个集合(按数据分类)。然后,基于数据模型,使用查询和聚合框架,甚至是应用程序,将数据合并在一起,细化数据,等等。通过使用Python,我导入了.csv数据库,并从中生成了一个带有嵌套数组的.json类型的文档。因此,使用pymongo,我将文档导入到我的MongoDB数据库中。你可以在这里修改代码:只是一些想法。最终数据模型应驱动CSV文件的整个导入过程。mongoimport具有仅导入字段子集的选项;您还可以将数据导入多个集合(按数据分类)。然后,基于数据模型,使用查询和聚合框架,甚至是应用程序,将数据合并在一起,细化数据,等等。通过使用Python,我导入了.csv数据库,并从中生成了一个带有嵌套数组的.json类型的文档。因此,使用pymongo,我将文档导入到我的MongoDB数据库中。您可以在此处修改代码: