BasicBSONList只能使用数字键,而不是:[_ id]

5 mongodb

我试图一次向MongoDB插入多个记录,所以为此我为每个要插入的记录创建了一个javaBean并将它们添加到ArrayList中.

最后从ArrayList,我试图执行插入操作,如下所示

public void insert(ArrayList<QuoteReportBean> quotelist) {
     BasicDBList totalrecords = new BasicDBList();
    StringBuffer sb = new StringBuffer();
    int valuecount=0;
     for (QuoteReportBean reportbean: quotelist) {
         valuecount++;
            BasicDBObject dbrecord = new BasicDBObject();
            dbrecord.append("cust_id", reportbean.getCustomerId());
            dbrecord.append("unique_symbol", reportbean.getUniqueSymbol());
            sb.append(reportbean.getUniqueSymbol()+",");
            dbrecord.append("exch", reportbean.getExchange());
            dbrecord.append("access_time", reportbean.getDate());
            totalrecords.add(dbrecord);
          }
     WriteResult result = coll.insert(totalrecords,WriteConcern.NORMAL);
}
Run Code Online (Sandbox Code Playgroud)

但我是下面的错误

Exception in thread "taskExecutor-1" java.lang.IllegalArgumentException: BasicBSONList can only work with numeric keys, not: [_id]
        at org.bson.types.BasicBSONList._getInt(BasicBSONList.java:159)
        at org.bson.types.BasicBSONList._getInt(BasicBSONList.java:150)
        at org.bson.types.BasicBSONList.get(BasicBSONList.java:104)
        at com.mongodb.DBCollection.apply(DBCollection.java:501)
        at com.mongodb.DBCollection.apply(DBCollection.java:491)
        at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:195)
        at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:180)
        at com.mongodb.DBCollection.insert(DBCollection.java:58)
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗?

Tri*_*sha 2

BasicDBList 不能用于插入多个文档,它仅用于单个文档内的数组。要进行批量插入,您需要将 DBObject 数组传递到 insert 方法中。

我更改了您的代码来执行此操作,并且它工作正常,没有错误:

    StringBuffer sb = new StringBuffer();
    int valuecount = 0;
    final QuoteReportBean[] quotelist = {new QuoteReportBean()};
    DBObject[] totalrecords = new BasicDBObject[quotelist.length];
    for (int i = 0; i < quotelist.length; i++) {
        QuoteReportBean reportbean = quotelist[i];
        valuecount++;
        BasicDBObject dbrecord = new BasicDBObject();
        dbrecord.append("cust_id", reportbean.getCustomerId());
        dbrecord.append("unique_symbol", reportbean.getUniqueSymbol());
        sb.append(reportbean.getUniqueSymbol() + ",");
        dbrecord.append("exch", reportbean.getExchange());
        dbrecord.append("access_time", reportbean.getDate());
        totalrecords[i] = dbrecord;
    }
    WriteResult result = coll.insert(totalrecords, WriteConcern.NORMAL);
Run Code Online (Sandbox Code Playgroud)