Mongoimport 的功能非常有限,在这种情况下,官方建议编写一个自定义脚本,逐行解析您的 csv 文件,并按照您希望它们表示的方式创建文档。
为了创建地理空间索引,位置信息必须存储在相同的键下,如地理空间索引文档顶部的“一些示例:”部分所述:http ://www.mongodb.org/显示/DOCS/地理空间+索引
直接从 .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 文件直接导入到您的集合中。