1

我正在编写一个应用程序,其中数据的输入源为 CSV 格式。我需要对数据库执行 CRUD 操作。我打算使用 MongoDB,因为我觉得它适合我的需要。

我的问题是 1. 如何将 CSV 数据存储在 MongoDB 中?2. 我需要将 CSV 解析为 json 吗?3、我想在UI上显示数据,那么MongoDB可以检索json格式的数据吗?

请帮助我,因为我是 MongoDB 的新手。

问候, Pradeep

4

3 回答 3

3

将 CSV 作为字符串直接存储在 MongoDB 中将是一个非常糟糕的主意,因为以该格式操作和查询数据是不切实际的,因此您希望在添加时将其转换为 JSON(实际上是 BSON)文档它到 MongoDB。

如果是将 CSV 数据一次性导入 MongoDB,那么您可以使用该mongoimport实用程序来执行此操作。否则,您需要在处理 CSV 输入数据的代码中进行转换。

于 2013-07-20T17:15:43.787 回答
0

使用 JAVA

Grid FS将文件存储在两个集合中:

  • bucketName.chunks(GridFS 将文件划分为块,这些块存储为块集合中的不同文档。)
  • bucketName.files GridFS 将有关存储文件的信息存储在文件集合中。每个存储的文件将有一个文件收集文档。

为了检索存储的文件,GridFS 定位并返回其所有组件块。

使用 GridFS 将 csv 文件存储到mongoDB

public static void main(String[] args) throws IOException {
    mongoDB_GRIDFS("D:\\Yash\\JavaCSV.csv");
}
public static void mongoDB_GRIDFS(String csvlocation) throws IOException{
    Mongo Mongo = new Mongo( "localhost" , 27017 ); // Connect to MongoDB
    DB db = Mongo.getDB( "DBName" ); // Get database
    String bucketName = "BucketName";
    GridFS gridFs = new GridFS(db,bucketName); //Create instance of GridFS implementation  
    String imageName = "image1";
        //upload(gridFs, inputcsvlocation);
        //download(gridFs, imageName);
        //delete(gridFs, imageName);        
    Mongo.close();
}
public static void upload(GridFS gridFs, String csvlocation, String imageName) throws IOException{
    GridFSInputFile gridFsInputFile = gridFs.createFile(new File(csvlocation));
    gridFsInputFile.setId("777");
    gridFsInputFile.setFilename(imageName); //Set a name on GridFS entry
    gridFsInputFile.save(); //Save the file to MongoDB
}
public static void download(GridFS gridFs, String imageName) throws IOException{
    GridFSDBFile outputImageFile = gridFs.findOne(imageName);
    String outcsvLocation = "D:\\Yash\\mongoCSV.csv";//Location of the file read from MongoDB to be written
    outputImageFile.writeTo(new File(outcsvLocation));
}
public static void delete(GridFS gridFs, String imageName){
    gridFs.remove( gridFs.findOne(imageName) );
}

将 csv 数据转换为 JSON(或)将 JSON 转换为 csv

public static void main(String myHelpers[]) throws ParseException, IOException{
    String jsonString = "{'csvdata': [{'field1': 11,'field2': 12,'field3': 13},{'field1': 21,'field2': 22,'field3': 23},{'field1': 31,'field2': 32,'field3': 33}]}";

    Json2Csv("D:\\Yash\\JavaCSV.csv", jsonString);
    csv2Josn("D:\\Yash\\JavaCSV.csv");
}
@SuppressWarnings("unchecked")
public static void csv2Josn(String fileName) throws IOException{
    BufferedReader csv = new BufferedReader(new FileReader(new File(fileName)));
    JSONObject obj = new JSONObject();
    JSONArray csvFields = new JSONArray();
    String csvRow = "", keys = "";
    int rowscount = 0;
    while((csvRow = csv.readLine()) != null){
        String[] data = csvRow.split(","); 
        if (rowscount == 0) keys = csvRow;
        else if(data.length == keys.split(",").length){ 
            JSONObject fieldobj = new JSONObject();
            for (int i = 0; i < data.length; i++) fieldobj.put( keys.split(",")[i], data[i]);
            csvFields.add(fieldobj);
        }
        rowscount++;
    }
    obj.put("scvdata", csvFields);
    System.out.println("Final Object : "+obj);
}
public static void Json2Csv(String fileName, String jsonString) throws IOException, ParseException{
    JSONParser jparser = new JSONParser();      
    jsonString = jsonString.replace("'", "\"");
    java.io.FileWriter writer = new FileWriter(fileName);
        JSONObject output = (org.json.simple.JSONObject) jparser.parse(jsonString);
        JSONArray csvdata = (org.json.simple.JSONArray) output.get("csvdata");
        String[] orderdkeys = {"field1", "field2", "field3"}; // JSONObject = HashMap (unorered)
        writer.append(orderdkeys[0]+","+orderdkeys[1]+","+orderdkeys[2]+"\n");
        for (int i = 0; i < csvdata.size(); i++) {
            JSONObject row = (JSONObject) csvdata.get(i);
            StringBuffer rowdata= new StringBuffer();
            if (orderdkeys.length == row.size())
            for (int j = 0; j < row.size(); j++) {
                rowdata.append(row.get(orderdkeys[j]));
                if (j+1 < row.size()) rowdata.append(",");
            }
            writer.append(rowdata.append("\n").toString());
        }
        writer.flush();         writer.close();
}
于 2015-11-05T12:15:14.543 回答
0

电源外壳脚本

import-csv "SampleInput.csv" | ConvertTo-Json | Add-Content -Path "output.json"
    
cmd.exe /c "mongoimport -h hostname:port--jsonArray --db dbName --collection collectionName --file output.json"
于 2018-03-22T04:00:03.787 回答