使用Java将Excel数据导入到Mongodb

尝试以下列文档格式导入Excel数据到Mongo数据库

[ {"productId":"", "programeName":"", "programeThumbImageURL":"", "programeURL":"", "programEditors":["editor1","editor2"], "programChapters":[ { "chapterName":"chapter1", "authorNames":["authorName1","authorname2"] }, {"chapterName":"chapter2"}, "authorNames":["authorName1","authorName2"] } ,... ]},...] 

在Excel中有许多产品与chapterNames有多个作者。 以下是试图执行的代码,我可以插入数据。 但是我无法合并与上面的特定chapterName对应的authorNames。 所以目前有programChapters数组包含复制chapterNames对象。 以下代码显示了我的这个实验。

 private static XSSFWorkbook myWorkBook; public static void main(String[] args) throws IOException { String[] programs = {"programName1","programName2","programName3","programName4",...}; @SuppressWarnings("deprecation") Mongo mongo = new Mongo("localhost", 27017); @SuppressWarnings("deprecation") DB db = mongo.getDB("dbName"); DBCollection collection = db.getCollection("programsCollection"); File myFile = new File("dsm_article_author_details.xlsx"); FileInputStream fis = new FileInputStream(myFile); // Finds the workbook instance for XLSX file myWorkBook = new XSSFWorkbook(fis); XSSFSheet mySheet = myWorkBook.getSheetAt(0); // Get iterator to all the rows in current sheet @SuppressWarnings("unused") Iterator<Row> rowIterator = mySheet.iterator(); // Traversing over each row of XLSX file for (String program : programs) { String programName = ""; String chapterName = ""; String authorName = ""; BasicDBObject product = new BasicDBObject(); BasicDBList programChaptersList = new BasicDBList(); // For Each Row , Create Chapters Object here for (int i = 0; i <= mySheet.getLastRowNum(); i++) { // points to the starting of excel ie // excel first row Row row = (Row) mySheet.getRow(i); // sheet number System.out.println("Row is :" + row.getRowNum()); BasicDBObject programChapters = new BasicDBObject(); if (row.getCell(0).getCellType() == Cell.CELL_TYPE_STRING) { programName = row.getCell(0).getStringCellValue(); System.out.println("programName : " + programName); } if (row.getCell(1).getCellType() == Cell.CELL_TYPE_STRING) { chapterName = row.getCell(1).getStringCellValue().replaceAll("\n", ""); System.out.println("chapterName : " + chapterName); } if (row.getCell(2).getCellType() == Cell.CELL_TYPE_STRING) { authorName = row.getCell(2).getStringCellValue(); System.out.println("authorName : " + authorName); } List<String> authors = new ArrayList<String>(); programChapters.put("chapterName", chapterName); authors.add(authorName); programChapters.put("authorName", authors); if (programName.trim().equals(program.trim())) { programChaptersList.add(programChapters); } } product.put("programName", program); product.put("programThumbImageURL", ""); product.put("programeURL", ""); product.put("programChapters", programChaptersList); collection.insert(product); System.out.println("*#*#*#*#*#"); } } 

我希望这是错误的部分。 需要将所有chapterName存储在一个数组中,并与每个即将到来的值进行比较,并根据该值创build新对象并将其存储在列表中

 List<String> authors = new ArrayList<String>(); programChapters.put("chapterName", chapterName); authors.add(authorName); programChapters.put("authorName", authors); 

有人可以build议我,可用的解决scheme:-)