[英]MongoDb Java APi - Ignore errors in bulk import
嗨,我正在使用此功能将文档导入mongodb
WriteResult com.mongodb.DBCollection.insert(List<DBObject> list)
一些插入失败,因为数据违反索引。 是否可以忽略这些错误并继续其他文档?
Exception in thread "main" com.mongodb.WriteConcernException: { "serverUsed" : "localhost:27017" , "ok" : 1 , "n" : 0 , "err" : "insertDocument :: caused by :: 16755 Can't extract geo keys from object, malformed geometry?: XXXXX , "code" : 16755}
at com.mongodb.CommandResult.getWriteException(CommandResult.java:90)
at com.mongodb.CommandResult.getException(CommandResult.java:79)
at com.mongodb.DBCollectionImpl.translateBulkWriteException(DBCollectionImpl.java:314)
at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:189)
对我有用的是:
wayCollection.insert(ways, new WriteConcern(0, 0, false, false, true));
如果您使用的是MongoDB 2.6+,则可以执行无序批量操作 。 如果在执行写操作时发生错误,MongoDB将继续处理其余操作:
DBCollection coll = db.getCollection("test");
BulkWriteOperation bulk = coll.initializeUnorderedBulkOperation();
bulk.insert(new BasicDBObject("foo", 1));
bulk.insert(new BasicDBObject("bar", 2));
bulk.execute();
这种方法的缺点是,如果需要按顺序执行插入操作,则无法使用它,但不利的是,批量插入操作的执行速度要比多次插入操作快。
另一个好处是,您可以从BulkWriteResult
对象(从execute
方法返回)中获得插入文档的数量。
您可以在此处查看有关批量插入的Java文档。
编辑:为了清楚起见,我不建议您忽略这些错误,您应该修复数据/插入。
编辑2您还可以使用执行批量操作并为该操作设置写关注点:
bulk.execute(new WriteConcern(0, 0, false, false, true));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.