简体   繁体   English

使用 Java 将 Excel 数据导入 Mongodb

[英]Import Excel Data to Mongodb using Java

Tried Importing Excel Data to Mongo db in the Following Document Format尝试以以下文档格式将 Excel 数据导入 Mongo db

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

There are many products in the Excel with with chapterNames has multiple authors. Excel 中有许多产品带有chapterNames 有多个作者。 following is the code which tried executing and i could do inserting data.以下是尝试执行的代码,我可以插入数据。 But the i couldn't merge the authorNames corresponding to a particular chapterName as above.但是我无法合并与上述特定章节名称相对应的作者名称。 So currently there are programChapters array contains objects as duplicated chapterNames.所以目前有 programChapters 数组包含对象作为重复的chapterNames。 Following code shows my experiment towards this.以下代码显示了我对此的实验。

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 i.e
                                                       // 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("*#*#*#*#*#");
}
}

I hope this is the part went wrong.我希望这是出错的部分。 Need to store all chapterNames in an array and compare with each upcoming value and according to that create new objects and store it in a list需要将所有chapterNames 存储在一个数组中并与每个即将到来的值进行比较,并根据该值创建新对象并将其存储在一个列表中

List<String> authors = new ArrayList<String>();

programChapters.put("chapterName", chapterName);

authors.add(authorName);
programChapters.put("authorName", authors);

Can someone suggest me, available solutions :-)有人可以建议我,可用的解决方案:-)

I hope this is the part went wrong.我希望这是出错的部分。 Need to store all chapterNames in an array and compare with each upcoming value and according to that create new objects and store it in a list需要将所有chapterNames 存储在一个数组中并与每个即将到来的值进行比较,并根据该值创建新对象并将其存储在一个列表中

List<String> authors = new ArrayList<String>();

programChapters.put("chapterName", chapterName);

authors.add(authorName);
programChapters.put("authorName", authors);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM