Mongoimport имеет очень ограниченные возможности, и в таких ситуациях официальная рекомендация - написать собственный скрипт, который построчно анализирует ваш CSV-файл и создает документы именно так, как вы хотели бы, чтобы они отображались.
Для создания геопространственного индекса информация о местоположении должна храниться под тем же ключом, как описано в разделе «Некоторые примеры:» в верхней части документации по геопространственной индексации: http://www.mongodb.org/display/DOCS/Geospatial+Indexing
При импорте данных непосредственно из файла .csv создаются документы, подобные этому:
doc1.csv:
place, lat, lon
Place 1,73.992964,40.739037
$ ./mongoimport -d test -c a --type csv --headerline --file doc1.csv
> db.a.find()
{ "_id" : ObjectId("4f7602d70c873ff911798fd3"), "place" : "Place 1", "lat" : 73.992964, "lon" : 40.739037 }
К сожалению, невозможно создать геопространственный индекс для документа выше.
В качестве эксперимента я безуспешно пытался импортировать файл .csv с данными во втором формате, который вы описали.
doc2.csv:
place, loc
Place1,[-73.992964,40.739037]
$ ./mongoimport -d test -c b --type csv --headerline --file doc2.csv
> db.b.find()
{ "_id" : ObjectId("4f7602e40c873ff911798fd4"), "place" : "Place1", "loc" : "[-73.992964", "field2" : "40.739037]" }
В качестве дальнейшего эксперимента я изменил документ .csv в формат json и импортировал его, и, похоже, это сработало.
doc3.json:
{name:"Place1" , loc:[-73.992964,40.739037]}
$ ./mongoimport -d test -c c --type json --file doc3.json
> db.c.find()
{ "_id" : ObjectId("4f7604570c873ff911798fd5"), "name" : "Place1", "loc" : [ -73.992964, 40.739037 ] }
Однако, если вы пишете сценарий для преобразования всех ваших файлов .csv в формат .json, вам, вероятно, лучше написать собственный сценарий для импорта файлов .csv прямо в вашу коллекцию.,