Spring Data MongoDB和批量更新

我正在使用Spring Data MongoDB,并希望像下面描述的那样执行批量更新: http : //docs.mongodb.org/manual/reference/method/Bulk.find.update/#Bulk.find.update

使用常规驱动程序时,它看起来像这样:

以下示例初始化项集合的Bulk()操作构建器,并将各种多更新操作添加到操作列表中。

var bulk = db.items.initializeUnorderedBulkOp(); bulk.find( { status: "D" } ).update( { $set: { status: "I", points: "0" } } ); bulk.find( { item: null } ).update( { $set: { item: "TBD" } } ); bulk.execute() 

有没有办法用Spring Data MongoDB实现类似的结果?

spring-data-mongodb 1.9.0.RELEASE支持批量更新。 这是一个示例:

 BulkOperations ops = template.bulkOps(BulkMode.UNORDERED, Match.class); for (User user : users) { Update update = new Update(); ... ops.updateOne(query(where("id").is(user.getId())), update); } ops.execute(); 

只要驱动程序是最新的并且您正在与之通信的服务器至少是MongoDB,您就可以使用它,这是批量操作所必需的。 不要相信Spring数据中有任何直接的东西(对于其他更高级别的驱动程序抽象也是如此),但您当然可以访问实现对Bulk API的访问的本机驱动程序集合对象:

  DBCollection collection = mongoOperation.getCollection("collection"); BulkWriteOperation bulk = collection.initializeOrderedBulkOperation(); bulk.find(new BasicDBObject("status","D")) .update(new BasicDBObject( new BasicDBObject( "$set",new BasicDBObject( "status", "I" ).append( "points", 0 ) ) )); bulk.find(new BasicDBObject("item",null)) .update(new BasicDBObject( new BasicDBObject( "$set", new BasicDBObject("item","TBD") ) )); BulkWriteResult writeResult = bulk.execute(); System.out.println(writeResult); 

您可以通过定义它们来填充所需的DBObject类型,也可以使用spring mongo库中提供的构建器,它们都应支持“提取”它们构建的DBObject