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.
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.
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:
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
You can add a column in CSV like parent_key.array_index.nested_key
CSV data example
JSON object image in mongo db after import
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With