高级查询"/>
MongoDB学习(四)mongodb高级查询
MongoDB 学习
第一章: MongoDB学习(一) 详细安装教程 win10
第二章:MongoDB学习(二)sql语法
第三章:MongoDB学习(三)SpringBoot整合MongoDB
第四章:MongoDB学习(四)mongodb高级查询-Query/Criteria
第五章:MongoDB学习(五)mongodb终极查询-Aggregate
MongoDB学习(四)mongodb高级查询-Query/Criteria
- MongoDB 学习
- MongoTemplate 方法详解
- find()
- findAll()
- findOne()
- findById()
- findDistinct()
- aggregate()
- count()
- Query 方法详解
- addCriteria()
- skip() limit()
- with()
- fields()
- Criteria 方法详解
MongoRepository已经提供了很多查询方法,可以满足我们大部分的查询需求,但是遇到更为复杂的查询我们就需要自己来创建查询条件。
MongoTemplate 方法详解
find()
/**
* *** 首先是最基础的find()
* 1. List<T> find(Query query, Class<T> entityClass)
* 2. List<T> find(Query query, Class<T> entityClass, String collectionName)
* 第一个参数为查询条件(构建的Query),第二个参数为返回类型,第三个参数为Collection名称。
*/
public void findByTemplate(){Query query = new Query();query.addCriteria(Criteria.where("name").is("小红")); //name=小红List<Student> student = mongoTemplate.find(query, Student.class, "student");System.out.println(student);
}
findAll()
/**
* *** 查找全部findAll()
* 1. List<T> findAll(Class<T> entityClass);
* 2. List<T> findAll(Class<T> entityClass, String collectionName);
* 第一个参数为返回类型,第二个参数为Collection名称。
*/
public void findByTemplate(){List<Student> student = mongoTemplate.findAll(Student.class, "student");System.out.println(student);
}
findOne()
/**
* *** 查找一条findOne()
* 1. T findOne(Query query, Class<T> entityClass)
* 2. T findOne(Query query, Class<T> entityClass, String collectionName)
* 第一个参数为查询条件(构建的Query),第二个参数为返回类型,第三个参数为Collection名称。
* 查到多条返回第一条,未查到返回null
*/
public void findByTemplate(){Query query = new Query();query.addCriteria(Criteria.where("name").is("小红")); //name=小红Student one = mongoTemplate.findOne(query, Student.class);System.out.println(one);
}
findById()
/**
* *** 根据id查询 findById()
* 1. T findById(Object id, Class<T> entityClass)
* 2. T findById(Object id, Class<T> entityClass, String collectionName)
* 第一个参数为id,第二个参数为返回类型,第三个参数为Collection名称。
*/
public void findByTemplate(){Student byId = mongoTemplate.findById("62a1beb0345f0000ab005e18", Student.class);System.out.println(byId);
}
findDistinct()
/**
* *** 去重查询 findDistinct()
* 注:去重查询后sort失效
* 1. List<T> findDistinct(Query query, String field, Class<?> entityClass, Class<T> resultClass)
* 2. List<T> findDistinct(Query query, String field, String collectionName, Class<?> entityClass, Class<T> resultClass)
* query 查询条件
* field 去重字段
* collectionName Collection名称
* entityClass Collection对应的实例class
* resultClass 返回对象class (一般和去重字段的类型一致)
*/
public void findByTemplate(){Query query = new Query();query.fields().include("age").exclude("_id");List<Integer> distinct = mongoTemplate.findDistinct(query, "age", "student", Integer.class);System.out.println(distinct);
}
aggregate()
/**
* *** 分组查询 aggregate()
* 1. AggregationResults<O> aggregate(Aggregation aggregation, Class<?> inputType, Class<O> outputType)
* 2. AggregationResults<O> aggregate(Aggregation aggregation, String collectionName, Class<O> outputType)
* aggregation Aggregation对象
* inputType Collection对应的实例class
* outputType 返回对象class
* collectionName Collection名称
*/
public void findByTemplate(){Aggregation aggregation = Aggregation.newAggregation(
// Aggregation.match(),Aggregation.group("classes","age").count().as("count"),Aggregation.project("count").andInclude("classes","age"));List<Map> mappedResults = mongoTemplate.aggregate(aggregation, Student.class, Map.class).getMappedResults();System.out.println(mappedResults);
}
count()
/**
* *** 查询总数 count()
* long count(Query query, Class<?> entityClass)
* long count(Query query, String collectionName)
* long count(Query query, @Nullable Class<?> entityClass, String collectionName)
* query 构建的Query
* collectionName Collection名称
* entityClass Collection对应的实例class
*/
public void findByTemplate(){Query query = new Query();long count = mongoTemplate.count(query, "student");System.out.println(count);
}
Query 方法详解
查询的基本方法了解后,我们知道所有的查询条件都要用Query来创建。然后我们来看下Query的方法。
addCriteria()
// 设置查询条件
Query query = new Query();
query.addCriteria(Criteria.where("name").is("小红")); //name=小红
skip() limit()
// 跳过前2条数据,查询5条数据
Query query = new Query();
query.skip(2).limit(5);
with()
// 排序
Query query = new Query();
query.with(Sort.by(Sort.Direction.ASC,"age"));
// 分页(不好用,一般用skip和limit)
Query query = new Query();
query.with(PageRequest.of(2,5));
fields()
// 返回字段
Query query = new Query();
query.fields().include("age").include("name").exclude("_id"); //只返回age,name
Criteria 方法详解
方法名 | 释义 | 举例 |
---|---|---|
where() | where | Criteria.where(“name”).is(“小红”) |
andOperator() | and | Criteria.where(“name”).is(“小红”).andOperator(Criteria.where(“age”).is(7)); Criteria.andOperator(Criteria.where(“name”).is(“小红”), Criteria.where(“age”).is(7)); |
orOperator() | or | Criteria.where(“name”).is(“小红”).orOperator(Criteria.where(“age”).is(7)); Criteria.orOperator(Criteria.where(“name”).is(“小红”), Criteria.where(“age”).is(7)); |
is() | == | Criteria.where(“name”).is(“小红”) |
not() | != | Criteria.where(“name”).not(“小红”) |
regex() | like | Criteria.where(“name”).regex(“.**?” +“小红”+ “.*”) |
in() | in | Criteria.where(“age”).in(ageList)) |
gt() | 大于 | Criteria.where(“age”).gt(7) |
gte () | 大于等于 | Criteria.where(“age”).gte(7) |
lt() | 小于 | Criteria.where(“age”).lt(7) |
lte() | 小于等于 | Criteria.where(“age”).lte(7) |
更多推荐
MongoDB学习(四)mongodb高级查询
发布评论