2013-07-20 2 views
0

Я пишу приложение, в котором источник входных данных находится в формате CSV. Мне нужно выполнить операции CRUD в БД. Я планирую пойти с MongoDB, так как считаю, что это соответствует моей потребности.MongoDB с данными CSV

Мой вопрос: 1. Как хранить данные CSV в MongoDB? 2. Нужно ли разбирать CSV для json? 3. Я хочу отобразить данные в пользовательском интерфейсе, поэтому может ли MongoDB получить данные в формате json?

Пожалуйста, помогите мне, так как я новичок в MongoDB.

С уважением, Прадипом

ответ

2

Хранение CSV непосредственно в MongoDB, как строка была бы очень плохая идея, поскольку это было бы нецелесообразно, чтобы манипулировать и запрашивать данные в этом формате, так что вы хотите, чтобы преобразовать его на JSON (BSON на самом деле), поскольку вы добавляете его в MongoDB.

Если это одноразовый импорт CSV-данных в MongoDB, вы можете использовать утилиту mongoimport для этого. В противном случае вам нужно будет сделать преобразование в вашем коде, которое будет обрабатывать входные данные CSV.

0

Использования JAVA

Grid FS хранит файлы в двух сборниках:

  • bucketName.chunks (. GridFS делит файл на куски, которые хранятся в виде различных документов в коллекции кусковой)
  • bucketName.files GridFS хранит информацию о сохраненных файлах в коллекции файлов. В каждом сохраненном файле будет один файл коллекции файлов.

Для извлечения сохраненного файла GridFS находит и возвращает все его компоненты.

магазин CSV файл MongoDB с помощью GridFS

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)); 
} 

Convert 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(); 
} 
Смежные вопросы