如何从GridFS读取文件 - MongoDB

时间:2014-12-02 16:02:28

标签: java mongodb

我想从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命令,所以它不能在这里工作。如果我错了,请纠正我。

感谢。

0 个答案:

没有答案