SpringBoot 操作 MongoDB
【摘要】
一、 MongoDB
关于MongoDB的介绍和基本操作及副本集群搭建可先参考下面我的博客: MongoDB副本集 集群搭建:
https://blog.csdn.net/qq_43692950...
一、 MongoDB
关于MongoDB的介绍和基本操作及副本集群搭建可先参考下面我的博客:
MongoDB副本集 集群搭建:
https://blog.csdn.net/qq_43692950/article/details/114807506
MongoDB基本使用
https://blog.csdn.net/qq_43692950/article/details/114805906
二、 SpringBoot 操作MongoDB
- 引入pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
- 1
- 2
- 3
- 4
- application.properties
spring.application.name=mongodb-demo
server.port=8080
# mongodb
#单机模式
#spring.data.mongodb.uri=mongodb://127.0.0.1:27017/demodb
#副本集模式
spring.data.mongodb.uri=mongodb://192.168.40.129:27017,192.168.40.129:27018,192.168.40.129:27019/testdb?connect=replicaSet&slaveOk=true&replicaSet=myrs
#分片集群模式,连接路由服务器的地址
#spring.data.mongodb.uri=mongodb://192.168.40.129:27017,192.168.40.130:27117/testdb
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 实体类
@Data
@Document(collection = "demo_collection")//可以省略,如果省略,则默认使用类名小写映射集合
@CompoundIndex( def = "{'gender': 1, 'age': -1}") //复合索引
public class DemoEntity implements Serializable {
@Id
private Long id;
//单字段的索引
@Indexed
//该属性对应mongodb的字段的名字,如果一致,则无需该注解
@Field("username")
private String name;
private int age;
private int gender;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- Repository
@Repository
public interface DemoCollectionRepository extends MongoRepository<DemoEntity,String> {
}
- 1
- 2
- 3
- 基于MongoRepository 的基本操作
@Slf4j
@Service
public class DemoTestService {
@Autowired
DemoCollectionRepository demoCollectionRepository;
/*
保存数据
有save和insert方法,
使用insert:方法,当主键在集合中存在时,不做任何处理, 抛异常
使用save方法时,当主键在集合中存在时,会进行更新, 数据整体都会更新 ,新数据会替换掉原数据 ID 以外的所有数据。ID 不存在则新增一条数据
*/
private void save(){
DemoEntity demoEntity = new DemoEntity();
demoEntity.setName("abc");
demoEntity.setAge(18);
demoEntity.setGender(50);
//插入一条
DemoEntity save = demoCollectionRepository.insert(demoEntity);
log.info(save.toString());
//插入多条
List<DemoEntity> list = new ArrayList<>();
list.add(demoEntity);
list.add(demoEntity);
list.add(demoEntity);
demoCollectionRepository.insert(list);
}
/*
删除数据
delete(T entities)通过对象信息删除某条数据
deleteById(ID id)通过id删除某条数据
deleteALL(Iterable<? extends T> entities)批量删除某条数据
deleteAll() 清空表中所有的数据
*/
private void delete(){
//根据条件删除
DemoEntity demoEntity = new DemoEntity();
demoEntity.setName("abc");
demoCollectionRepository.delete(demoEntity);
//根据id删除
demoCollectionRepository.deleteById("1");
//批量删除
DemoEntity demoEntity1 = new DemoEntity();
demoEntity1.setName("abc");
List<DemoEntity> list = new ArrayList<>();
demoCollectionRepository.deleteAll(list);
//删除全部
demoCollectionRepository.deleteAll();
}
/*
修改数据
*/
private void update(){
DemoEntity demoEntity = new DemoEntity();
demoEntity.setId(1L);
demoEntity.setName("abc11");
demoCollectionRepository.save(demoEntity);
}
/*
查询
findAll() 获取表中所有的数据
findAll(Sort sort) 获取表中所有的数据,按照某特定字段排序
findAll(Pageable pageAble) 获取表中所有的数据,分页查询
findAll(Example< T > example) 条件查询
findAll(Iterable ids) 条件查询
findAll(Example< T > example,Pageable pageable) 条件分页查询
findAll(Example< T > example,Sort sort) 条件查询排序
findOneById(ID id) 通过id查询一条数据
findOne(Example example) 通过条件查询一条数据
*/
public void find(){
//获取表中所有的数据
List<DemoEntity> all = demoCollectionRepository.findAll();
// 获取表中所有的数据,按照某特定字段排序
List<DemoEntity> all1 = demoCollectionRepository.findAll(Sort.by(Sort.Direction.DESC,"id"));
// 获取表中所有的数据,分页查询
int page = 2;
int size = 100;
Page<DemoEntity> all2 = demoCollectionRepository.findAll(PageRequest.of(page, size));
// 批量查询
List<String> ids = new ArrayList<>();
ids.add("1");
ids.add("2");
Iterable<DemoEntity> allById = demoCollectionRepository.findAllById(ids);
// 查询一条
DemoEntity demoEntity = new DemoEntity();
demoEntity.setId(1L);
demoEntity.setName("abc11");
Example<DemoEntity> example = Example.of(demoEntity);
Optional<DemoEntity> one = demoCollectionRepository.findOne(example);
DemoEntity entity = one.get();
// 条件查询
demoCollectionRepository.findAll(example);
}
/*
count()统计总数
count(Example< S > example)条件统计总数
existsById(ID id) 判断数据是否存在
exists(Example< T > example) 判断某特定数据是否存在
*/
public void other(){
//统计个数
demoCollectionRepository.count();
DemoEntity entity1 = new DemoEntity();
entity1.setName("abc");
Example<DemoEntity> example = Example.of(entity1);
long count = demoCollectionRepository.count(example);
//判断数据是否存在
boolean b = demoCollectionRepository.existsById("1");
demoCollectionRepository.exists(example);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 基于MongoTemplate 的基本操作
@Service
public class DemoDaoImpl implements DemoDao {
@Resource
private MongoTemplate mongoTemplate;
@Override
public void saveDemo(DemoEntity demoEntity) {
//当主键在集合中存在时,会进行更新, 数据整体都会更新
mongoTemplate.save(demoEntity);
//当主键在集合中存在时,不做任何处理, 抛异常
mongoTemplate.insert(demoEntity);
}
@Override
public void removeDemo(Long id) {
//根据id删除
DemoEntity demoEntity = new DemoEntity();
demoEntity.setId(id);
mongoTemplate.remove(demoEntity);
}
@Override
public void updateDemo(DemoEntity demoEntity) {
//修改数据
Query query = new Query(Criteria.where("id").is(demoEntity.getId()).and("name").is("abc"));
Update update = new Update();
update.set("name", demoEntity.getName());
//修改第一条
mongoTemplate.updateFirst(query, update, DemoEntity.class);
//修改所有符合条件的
mongoTemplate.updateMulti(query, update, DemoEntity.class);
}
@Override
public DemoEntity findDemoById(Long id) {
//根据id查询
Query query = new Query(Criteria.where("id").is(id));
DemoEntity demoEntity = mongoTemplate.findOne(query, DemoEntity.class);
return demoEntity;
}
@Override
public List<DemoEntity> findDemoAll() {
//查询全部
return mongoTemplate.findAll(DemoEntity.class);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 基于MongoTemplate 中的 Query
Query query = new Query();
//or
query.addCriteria(
new Criteria().orOperator(
Criteria.where("name").is("abc"),
Criteria.where("name").is("bcv")
));
//and
query.addCriteria(
new Criteria().andOperator(
Criteria.where("name").is("abc"),
Criteria.where("name").is("bcv")
));
//排序
query.with(Sort.by(Sort.Direction.DESC,"id"));
//分页
query.skip(0).limit(10);
//and 和 or 一起使用
query.addCriteria(
new Criteria().orOperator(
Criteria.where("name").is("abc"),
new Criteria().andOperator(
Criteria.where("name").is("asd"),
Criteria.where("age").is(18)
)
)
);
//正则
query.addCriteria(Criteria.where("name").regex("/a/"));
query.addCriteria(Criteria.where("name").regex("/^a/"));
//范围
/*
gt 大于 >
gte 大于等于 >=
lt 小于 <
lte 小于等于 <=
ne 不等于 !=
*/
query.addCriteria(
new Criteria().andOperator(
Criteria.where("age").gt(15)
));
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
文章来源: blog.csdn.net,作者:小毕超,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq_43692950/article/details/115036430
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)