插入
save
save
方法是一个通用的方法,可以用来保存一个对象到数据库中,如果对象已经存在,则更新对象,如果对象不存在,则插入对象。
保存一条数据,集合为当前类的类名
public <T> T save(T objectToSave);
// 例如:保存User对象
User user = User().builder().id("1").name("张三").age(18).build();
mongoTemplate.save(user);
保存一条数据,指定集合名称
// 保存一条数据,指定集合名称
public <T> T save(T objectToSave, String collectionName);
// 例如:保存User对象到user集合
User user = User().builder().id("1").name("张三").age(18).build();
mongoTemplate.save(user, "user");
insert
保存一条数据,集合为当前类的类名
public <T> T insert(T objectToSave);
// 例如:保存User对象
User user = User().builder().id("1").name("张三").age(18).build();
mongoTemplate.insert(user);
保存一条数据,指定集合名称
public <T> T insert(T objectToSave, String collectionName);
// 例如:保存User对象到user集合
User user = User().builder().id("1").name("张三").age(18).build();
mongoTemplate.insert(user, "user");
保存多条数据,集合为当前类的类名
// 保存多条数据,若保存 A B C 三条数据 其中 B 这条数据的主键已经存在,A 会保存成功,B C 保存失败
public <T> Collection<T> insertAll(Collection<? extends T> objectsToSave)
// 例如:保存多条User对象
List<User> userList = new ArrayList<>();
userList.add(User().builder().id("1").name("张三").age(18).build());
userList.add(User().builder().id("2").name("李四").age(20).build());
userList.add(User().builder().id("3").name("王五").age(22).build());
mongoTemplate.insertAll(userList);
insert:若新增数据的主键已经存在,则会抛 DuplicateKeyException 异常提示主键重复,不保存当前数据。
save:若新增数据的主键已经存在,则对当前数据进行更新操作。
// 插入单条
Book book = new Book("高等数学上", 37.70, "高等教育出版社", new Author[]{new Author("同济大学数学系", "")}, new String[]{"数学", "大学数学", "高等数学"});
mongoTemplate.insert(book, BOOK_COLLECTION);
直接使用 insert
进行插入,会在 mongo
中出现 _class
字段,如果想去掉此字段,可以自定义 MappingMongoConverter
配置
@Configuration
public class MongoConfig {
@Bean
public MappingMongoConverter mappingMongoConverter(MongoDatabaseFactory factory, MongoMappingContext context, BeanFactory beanFactory) {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);
try {
mappingConverter.setCustomConversions(beanFactory.getBean(CustomConversions.class));
} catch (NoSuchBeanDefinitionException ignore) {
}
// Don't save _class to mongo
mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
return mappingConverter;
}
}
最后更新于
这有帮助吗?