MongoDB с данными CSV
Я пишу приложение, в котором источником данных является формат CSV. Мне нужно выполнить операции CRUD на БД. Я планирую пойти с MongoDB, так как я чувствую, что это соответствует моим потребностям.
У меня вопрос к 1. Как хранить данные CSV в MongoDB? 2. Нужно ли анализировать CSV для JSON? 3. Я хочу отобразить данные в пользовательском интерфейсе, поэтому можно ли MongoDB получить данные в формате json?
Пожалуйста, помогите мне, так как я новичок в MongoDB.
С уважением, Прадип
3 ответа
Хранение CSV непосредственно в MongoDB в виде строки было бы очень плохой идеей, поскольку было бы нецелесообразно манипулировать и запрашивать данные в этом формате, поэтому вы захотите преобразовать их в документы JSON (фактически BSON) по мере добавления это в MongoDB.
Если это однократный импорт данных CSV в MongoDB, то вы можете использовать mongoimport
утилита для этого. В противном случае вам нужно будет выполнить преобразование в вашем коде, которое касается входных данных CSV.
скрипт Power Shell
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"
Используя 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) );
}
Преобразование данных 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();
}