Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoDB - Import CSV into nested document

Tags:

mongodb

I have a schema, with a document structure that looks like this:

{ "_id" : ObjectId( "4f8dcb06ee21783d7400003c" ),
  "venue" : ObjectId( "4f8dcb06ee21783d7400003b" ),
  "name" : "Some event",
  "webite: "www.whatever.com",
  "attendees" : [
                    { "_id" : ObjectId( "4f8dfb06ee21783d7134503a" ), "firstName" : "Joe", "lastName" : "Blogs", "emailAddress" : "[email protected]" },
                    { "_id" : ObjectId( "4f8dfb06ee21783d7134503b" ), "firstName" : "John", "lastName" : "West", "emailAddress" : "[email protected]" }
                    { "_id" : ObjectId( "4f8dfb06ee21783d7134503c" ), "firstName" : "Simon", "lastName" : "Green", "emailAddress" : "[email protected]" }
                    { "_id" : ObjectId( "4f8dfb06ee21783d7134503d" ), "firstName" : "Harry", "lastName" : "Smith", "emailAddress" : "[email protected]" }
                ],
  "eventType" : "Party"
}

I have a CSV file, that I'd like to import into the attendees collection...

Is that possible using mongoimport? I read this: Using mongoimport to read CSV into nested structure? and it seems as though the answer could be no...

Since this is a one time operation, I wouldn't mind if I had to import it into an "attendees" collection, then run another command to insert into the attendees collection within my document? (there's only one event document at the moment....)

like image 667
Alex Avatar asked Apr 19 '12 22:04

Alex


1 Answers

You are correct, and unfortunately the answer is no.

Mongoimport is a very simple program. (You can see for yourself here: https://github.com/mongodb/mongo/blob/master/src/mongo/tools/import.cpp) For users who would like to import data that is more complicated than a 2-dimensional table of strings and numbers, the official advice is to write a custom script that will read in your input file and create documents in exactly the format that you would like them. Hopefully the import.cpp file will give you some ideas on how to get started.

like image 129
Marc Avatar answered Oct 19 '22 20:10

Marc