Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB批插入不适用于java驱动程序2.11.2_Java_Mongodb_Batch Insert - Fatal编程技术网

MongoDB批插入不适用于java驱动程序2.11.2

MongoDB批插入不适用于java驱动程序2.11.2,java,mongodb,batch-insert,Java,Mongodb,Batch Insert,MongoDb 2.4.7 mongo-java-driver-2.11.2.jar 视窗7 因此,我试图通过插入一批插入来加载TestMongoDB,以判断它能处理多少吞吐量。如果一次插入一个,则其工作正常: 现在,如果我将其更改为批处理,则不会工作重复密钥异常激发: 您将得到相同对象的列表,所有列表项都将使用{recnum:99}引用同一对象, 看来这不是你想要做的。您需要在上创建新的BasicDBObject 每个for循环迭代,否则您将在每个迭代中修改相同的jobRecord 这同样

MongoDb 2.4.7

mongo-java-driver-2.11.2.jar

视窗7

因此,我试图通过插入一批插入来加载TestMongoDB,以判断它能处理多少吞吐量。如果一次插入一个,则其工作正常:

现在,如果我将其更改为批处理,则不会工作重复密钥异常激发:


您将得到相同对象的列表,所有列表项都将使用{recnum:99}引用同一对象, 看来这不是你想要做的。您需要在上创建新的BasicDBObject 每个for循环迭代,否则您将在每个迭代中修改相同的jobRecord


这同样适用于逐个方法:您正在观察不同的recnum字段,因为对象在修改之前已经插入到Mongo中。

new BasicDBObject。。。只是一个字段和值的文档。没错,它应该自动生成_id。我认为它所做的是生成第一个_id,然后将该_id复制到要插入批处理的下一个文档中。第一次插入有效,批处理中的第二次插入抛出异常
MongoClient conn = new MongoClient("localhost", 27017);
DB db = conn.getDB( "myDb" );

BasicDBObject jobRecord = new BasicDBObject(...);

DBCollection coll = db.getCollection("myTable");

BasicDBObject finalJobRecord;

for(int i=0;i<100;i++)
{
    finalJobRecord = jobRecord;
    finalJobRecord = finalJobRecord.append("recnum",String.valueOf(i));
    coll.insert(finalJobRecord); 
    finalJobRecord.removeField("_id");// wont work without because of duplicate key errors
}
conn.close();
MongoClient conn = new MongoClient("localhost", 27017);
DB db = conn.getDB( "myDb" );

BasicDBObject jobRecord = new BasicDBObject(...);

DBCollection coll = db.getCollection("myTable");

BasicDBObject finalJobRecord;

List<DBObject> basicDBObjects = new LinkedList<>();

for(int i=0;i<100;i++)
{
    finalJobRecord = jobRecord;
    finalJobRecord = finalJobRecord.append("recnum",String.valueOf(i));
    basicDBObjects.add(finalJobRecord);
}
coll.insert(basicDBObjects);
conn.close();