Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using mongoimport to read CSV into nested structure?

I have a mongo document with a structure like: { "foo": { "bar1": "val1", "bar2": "val2"} } I'd like to import my data from a csv using mongoimport --type csv --headerline [...]

I am not sure how to format the field name in the csv to address the nested structure. For instance:

test.csv:

foo.bar1
example

returns { "_id" : ObjectId("4e9d9d25c5d8708e1f51cdbc"), "foo.bar1" : "example" } instead of the desired output:

{ "_id" : ObjectId("4e9d9d25c5d8708e1f51cdbc"), "foo: {"bar1" : "example"} }

The field name seems to be interpreted as a string regardless of its value. Things like foo[bar1] and foo: {bar1} are also used verbatim.

like image 313
Jason Winget Avatar asked Oct 18 '11 15:10

Jason Winget


People also ask

How do I link my csv file to MongoDB?

You can use the mongoimport command to import CSV files into a collection using the headerline option. Headerline option notifies the mongoimport command of the first line; to be not imported as a document since it contains field names instead of data.


2 Answers

This isn't supported in the current (v2.0) version of mongoimport, but it should be coming soon. You can check out the JIRA ticket here, scheduled for v2.1:

  • Dotted field names should produce nested objects in mongoimport

Until then, if you can translate your CSV data to JSON then you could use mongoimport --type json to import the nested data.

EDIT: This feature is released now, and available from 2.8.0-rc0

like image 64
Chris Fulstow Avatar answered Sep 28 '22 02:09

Chris Fulstow


You can add a column in CSV like parent_key.array_index.nested_key

CSV data example

CSV data example

JSON object image in mongo db after import

JSON object image in mongo db after import

like image 40
Muhammad Tarique Avatar answered Sep 28 '22 02:09

Muhammad Tarique