BiJ*_*BiJ 5 spring mongodb spring-mongo spring-data-mongodb spring-mongodb
我有一个记录列表,例如
[
{"id":"1", "name":"a", "user":"u1"},
{"id":"2", "name":"b", "user":"u1"},
{"id":"3", "name":"c", "user":"u1"}
]
Run Code Online (Sandbox Code Playgroud)
现在根据条目是否已经存在于数据库中,它应该更新或插入文档。对于更新,存在一个条件,即现有user字段的值应与user文档中提供的值相匹配。
当然我可以循环运行列表并使用
mongoOperations.save(...);
Run Code Online (Sandbox Code Playgroud)
但是如果我有一个很大的列表,那么我将不得不为每个条目执行一个我认为效率不高的数据库操作。有没有其他有效的方法来执行此操作?
如果您使用 CRUD 存储库,那么 CRUD 存储库提供了可用于单个实体(mongoCollection)的 save() 方法,或者您可以使用重载的 save 方法
<S extends T> List<S> saveAll(Iterable<S> entites)
Run Code Online (Sandbox Code Playgroud)
它可以获取 Arraylist 并保存 arraylist 对象。无需使用循环。
您可以看到下面的示例,其中 InventoryService 类创建了 3 个 Inventory 对象并将所有对象添加到 ArrayList 中,最后将其传递到作为 CRUD 存储库的库存存储库。
@Service
public class InventoryService {
private static final Logger LOGGER = LoggerFactory.getLogger(InventoryService.class);
@Autowired
private InventoryRepository inventoryRepository;
public void aveInventoryDetails() {
List<Inventory> inventoryList = new ArrayList<Inventory>();
inventoryList.add(new Inventory("500", 10));
inventoryList.add(new Inventory("600", 20));
inventoryList.add(new Inventory("700", 30));
try {
inventoryRepository.saveAll(inventoryList);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
示例 Mongo 存储库
package com.bjs.repository;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.bjs.model.Inventory;
public interface InventoryRepository extends MongoRepository<Inventory, String> {
// empty as not defining any new method , we can use the existing save method
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11960 次 |
| 最近记录: |