Mongodb批量操作中的跟踪操作

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

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

请帮帮我。

感谢您 :) :)

首先,您需要使用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 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);