1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2.yml配置
# mongodb 没有开启任何安全协议
# mongodb(协议)://121.5.167.13(主机):27017(端口)/baizhi(库名)
spring.data.mongodb.uri=mongodb://121.5.167.13:27017/baizhi
# mongodb 存在密码
#spring.data.mongodb.host=tx.chenyn.cn
#spring.data.mongodb.port=27017
#spring.data.mongodb.database=baizhi
#spring.data.mongodb.username=root
#spring.data.mongodb.password=root
3.相关注解
-
@Document
-
修饰范围: 用在类上
-
作用: 用来映射这个类的一个对象为 mongo 中一条文档数据
-
属性:(
value 、collection
)用来指定操作的集合名称
-
-
@Id
-
修饰范围: 用在成员变量、方法上
-
作用: 用来将成员变量的值映射为文档的_id 的值
-
-
@Field
-
修饰范围: 用在成员变量、方法上
-
作用: 用来将成员变量以及值映射为文档中一个key、value对
-
属性: (
name,value
)用来指定在文档中 key 的名称,默认为成员变量名
-
-
@Transient
-
修饰范围: 用在成员变量、方法上
-
作用 : 用来指定改成员变量,不参与文档的序列化
-
@Data
@Document("user")
public class User {
@Id
private String id;
private String name;
private Integer age;
}
例如上面这个实体类
在操作时只需要注入
MongoTemplate 对象即可
@Autowired(required = false)
private MongoTemplate mongoTemplate;
4.查询
@Test
public void testQuery(){
//基于 id 查询
template.findById("1",User.class);
//查询所有
template.findAll(User.class);
template.find(new Query(),User.class);
//等值查询
template.find(Query.query(Criteria.where("name").is("编程不良人")),
User.class);
// > gt < lt >= gte <= lte
template.find(Query.query(Criteria.where("age").lt(25)),
User.class);
template.find(Query.query(Criteria.where("age").gt(25)),
User.class);
template.find(Query.query(Criteria.where("age").lte(25)),
User.class);
template.find(Query.query(Criteria.where("age").gte(25)),
User.class);
//and
template.find(Query.query(Criteria.where("name").is("编程不良人")
.and("age").is(23)),User.class);
//or
Criteria criteria = new Criteria()
.orOperator(Criteria.where("name").is("编程不良人_1"),
Criteria.where("name").is("编程不良人_2"));
template.find(Query.query(criteria), User.class);
//and or
Criteria criteria1 = new Criteria()
.and("age").is(23)
.orOperator(
Criteria.where("name").is("编程不良人_1"),
Criteria.where("name").is("编程不良人_2"));
template.find(Query.query(criteria1), User.class);
//sort 排序
Query query = new Query();
query.with(Sort.by(Sort.Order.desc("age")));//desc 降序 asc 升序
template.find(query, User.class);
//skip limit 分页
Query queryPage = new Query();
queryPage.with(Sort.by(Sort.Order.desc("age")))//desc 降序 asc 升序
.skip(0) //起始条数
.limit(4); //每页显示记录数
template.find(queryPage, User.class);
//count 总条数
template.count(new Query(), User.class);
//distinct 去重
//参数 1:查询条件 参数 2: 去重字段 参数 3: 操作集合 参数 4: 返回类型
template.findDistinct(new Query(), "name",
User.class, String.class);
//使用 json 字符串方式查询
Query query = new BasicQuery(
"{$or:[{name:'编程不良人'},{name:'徐凤年'}]}",
"{name:0}");
template.find(query, User.class);
}
5.新增
//新增
@Test
public void testInsert(){
User user=new User();
user.setName("小猫");
user.setAge(25);
mongoTemplate.insert(user);
}
6.修改
@Test
public void update(){
Query query = Query.query(Criteria.where("name").is("小猫"));
//2.更新内容
Update update = new Update();
update.set("name","小狗");
mongoTemplate.updateFirst(query,update,User.class);
}
7.删除
//删除
@Test
public void delete(){
Query query = Query.query(Criteria.where("name").is("小狗"));
mongoTemplate.remove(query,User.class);
}