我想从MongoDB GridFS读取文件。当我从Mongo Shell查询它时,我可以按照以下方式执行:
1> db.eval("var settings = new Object();\n" +
"settings = [\n" +
"{name:\"ID\", type:\"String\", start:1,stop:11},\n" +
"{name:\"Latitude\",type:\"Float\",start:13,stop:20 },\n" +
"{name:\"Longitude\",type:\"Float\",start:22,stop:30 },\n" +
"{name:\"Elevation\",type:\"Float\",start:32,stop:37},\n" +
"{name:\"State\",type:\"String\",start:39,stop:40},\n" +
"{name:\"Name\",type:\"String\",start:42,stop:71},\n" +
"{name:\"GSNFlag\",type:\"String\",start:73,stop:75},\n" +
"{name:\"HCNFlag\",type:\"String\",start:77,stop:79},\n" +
"{name:\"WMOID\",type:\"String\",start:81,stop:85},\n" +
"{name:\"Country\", type:\"String\", start:1,stop:2}\n" +
"]\n" +
"db.mycollection.save(settings); \n" +
"var settings = db.mycollection.findOne(); \n");
上面的模式文件将保存在mycollection集合中。它工作正常。
2>db.eval(“ function split(line, definition){
var result = new Object();
for (key in definition){
var column = definition[key];
if (column.type=="fixed"){
result[column.name] = column.value;
} else {
var s = line.substring(column.start-1,column.stop);
if (column.type=="Float"){
result[column.name] = parseFloat(s);
} else if (column.type=="Integer"){
result[column.name] = parseInt(s);
} else {
result[column.name] = s.trim();
}
}
}
return result;
}
”);
这是拆分功能,它将在上面的模式文件的基础上分割线。它也正常工作。
3>db.eval("function readFile(name,collection,definition){
var data = cat(name);
var all = new Array();
var lines = data.split("\n");
for(i=1;i<lines.length;i++){
var result = split(lines[i],definition);
all.push(result);
}
collection.insert(all);
return all.length;
}
",);
当我通过我的java代码运行上述代码时,它给出了错误: Reference error cat is not defined near cat(name) .
更新
我的目标是读取存储在gridfs上的固定宽度flatfile并将其以文档形式转储到mongodb,然后在其上发出sql命令。要从gridfs读取文件并以文档形式撕掉它,我使用的是Code 3&gt;。
请你给我一个cat命令的替代方案。我猜cat是一个mongo native shell命令,所以它不能在这里工作。如果我错了,请纠正我。
感谢。