Mongodb批量操作中的跟踪操作

时间:2014-12-11 11:41:08

标签: java mongodb

我正在使用MongoDB 2.6.1。我的问题是 - “是否有可能在批量操作中跟踪_id?” 假设我为BulkWriteOperation创建了一个对象,例如要从'A'集合插入'B'集合的50个文档。我需要 保留成功写入操作列表和写入操作失败

批量插入和删除工作正常。但问题是 - - “我需要跟踪_ids,查询 - 找到A 插入B集合的文档。同时,我需要保留一个_ids列表(成功和失败的操作)。我需要删除A集合中的文档,仅用于那些成功的操作并保留失败的文档“ -

请帮帮我。

感谢你:):)

1 个答案:

答案 0 :(得分:1)

首先,您需要使用UnorderedBulkOperation来执行整个批处理。您需要在BulkWriteOperation.execute()周围使用try / catch,捕获BulkWriteException,这样您就可以访问BulkWriteError以及BulkWriteResult的列表。

这是一个快速而又肮脏的例子:

MongoClient m = new MongoClient("localhost");
DB db = m.getDB( "test" );
DBCollection coll = db.getCollection( "bulk" );
coll.drop();
coll.createIndex(new BasicDBObject("i", 1), new BasicDBObject("unique", true));

BulkWriteOperation bulkWrite = coll.initializeUnorderedBulkOperation();

for (int i = 0; i < 100; i++) {
    bulkWrite.insert(new BasicDBObject("i", i));
}
// Now add 10 documents to the batch that will generate a unique index error
for (int i = 0; i < 10; i++) {
    bulkWrite.insert(new BasicDBObject("i", i));
}

BulkWriteResult result = null;
List<BulkWriteError> errors = null;
try {
    result = bulkWrite.execute();
} catch (BulkWriteException bwe) {
    bwe.printStackTrace();
    errors = bwe.getWriteErrors();
    result = bwe.getWriteResult();
}

for (BulkWriteError e : errors) {
    System.out.println(e.getIndex() + " failed");
}

System.out.println(result);