MongoDB学习(四)mongodb高级查询

编程入门 行业动态 更新时间:2024-10-24 16:30:39

MongoDB学习(四)mongodb<a href=https://www.elefans.com/category/jswz/34/1770104.html style=高级查询"/>

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()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)

更多推荐

MongoDB学习(四)mongodb高级查询

本文发布于:2024-03-11 17:06:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1729457.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:高级   MongoDB   mongodb

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!