mongoTemplate 批量更新示例
@Autowired
private MongoTemplate mongoTemplate;
public void bulkUpsert(List<Document_Name> documents) {
BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, Document_Name.class, Collection_Name);
for (YourDocument document : documents) {
Query query = new Query(Criteria.where("_id").is(document.getId())); // 指定根据哪个key来判断数据是否存在
Update update = new Update();
update.set("field1", document.getField1()); // 设置需要更新的字段,这里只是一个例子,你需要将这里替换为你需要更新的字段
update.set("field2", document.getField2());
// 更多的字段...
bulkOps.upsert(query, update);
}
System.out.println("开始执行 bulkOps.execute()");
BulkWriteResult result = bulkOps.execute();
System.out.println("bulkOps.execute() 执行结果: " + result);
}
注意:
1.Collection_Name 非必填字段
BulkOperations 的 bulkOps 方法在没有指定第三个参数的情况下,默认使用您在第二个参数中指定的类对应的集合(collection)。在 MongoDB 中,集合的名称通常是类名的小写形式。如果您使用的是 Spring Data MongoDB,并且在您的 YourDocument 类上定义了 @Document 注解,那么集合名称将是该注解中指定的名称。如果没有 @Document 注解,Spring Data MongoDB 将使用该类的简单类名并将其转换为小写作为集合名。
例子:
@Document(collection = "collection_name")
public class Document_Name {
// ...
}
在这种情况下,如果您调用 bulkOps 方法且没有提供第三个参数,将会使用 “collection_name” 这个集合。
类 Document_Name 没有 @Document 注解,那么集合名将默认为 “document_name”(类名的小写)。