MongoDB学习(四)mongodb高级查询-Query/Criteria

MongoDB 学习

第一章: MongoDB学习(一) 详细安装教程 win10

第二章:MongoDB学习(二)sql语法

第三章:MongoDB学习(三)SpringBoot整合MongoDB

第四章:MongoDB学习(四)mongodb高级查询-Query/Criteria

第五章:MongoDB学习(五)mongodb终极查询-Aggregate



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()whereCriteria.where(“name”).is(“小红”)
andOperator()andCriteria.where(“name”).is(“小红”).andOperator(Criteria.where(“age”).is(7)); Criteria.andOperator(Criteria.where(“name”).is(“小红”), Criteria.where(“age”).is(7));
orOperator()orCriteria.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()likeCriteria.where(“name”).regex(“.**?” +“小红”+ “.*”)
in()inCriteria.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)
  • 10
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值