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文件到您的收藏吧。
非常感谢这么详细的检查。预处理是我前进的方式,但我只是想确保我没有在mongoimport中丢失某些东西。 – Nick 2012-03-30 19:30:52