我正在编写一个应用程序,其中数据的输入源为 CSV 格式。我需要对数据库执行 CRUD 操作。我打算使用 MongoDB,因为我觉得它适合我的需要。
我的问题是 1. 如何将 CSV 数据存储在 MongoDB 中?2. 我需要将 CSV 解析为 json 吗?3、我想在UI上显示数据,那么MongoDB可以检索json格式的数据吗?
请帮助我,因为我是 MongoDB 的新手。
问候, Pradeep
我正在编写一个应用程序,其中数据的输入源为 CSV 格式。我需要对数据库执行 CRUD 操作。我打算使用 MongoDB,因为我觉得它适合我的需要。
我的问题是 1. 如何将 CSV 数据存储在 MongoDB 中?2. 我需要将 CSV 解析为 json 吗?3、我想在UI上显示数据,那么MongoDB可以检索json格式的数据吗?
请帮助我,因为我是 MongoDB 的新手。
问候, Pradeep
将 CSV 作为字符串直接存储在 MongoDB 中将是一个非常糟糕的主意,因为以该格式操作和查询数据是不切实际的,因此您希望在添加时将其转换为 JSON(实际上是 BSON)文档它到 MongoDB。
如果是将 CSV 数据一次性导入 MongoDB,那么您可以使用该mongoimport
实用程序来执行此操作。否则,您需要在处理 CSV 输入数据的代码中进行转换。
使用 JAVA
Grid FS将文件存储在两个集合中:
为了检索存储的文件,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();
}
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"