本章介绍Java MongoDB的文档查询操作。
1.前置教程
2.条件查询
2.1.执行MongoDB查询表达式
下面是直接执行MongoDB查询表达式的写法。
BasicQuery query = new BasicQuery("{ age : { $lt : 50 }, 'course.title' : { $eq : 'java教程' }}");
// 执行查询,指定返回结果映射到Person对象中, 同时跟Persion对象可以计算出集合的名字为: persion
List<person> result = mongoTemplate.find(query, Person.class);
2.2.MongoTemplate方式执行
Spring data mongodb 包针对MongoDB查询语法封装了一套API,方便我们快速编写MongoDB查询表达式。
例子:
// 导入包
import static org.springframework.data.mongodb.core.query.Criteria.where;
import static org.springframework.data.mongodb.core.query.Query.query;
// 省略
// 执行查询方式1
// 查询person类型数据,mongoTemplate将Java对象映射到MongoDB中的数据,这里等同于直接查询person集合中的数据,JSON文档指定跟Person对象属性一一对应.
List<person> result = mongoTemplate.query(Person.class)
.matching(query(where("age").lt(50).and("accounts.balance").gt(1000.00d))) // 设置查询条件
.all(); // 执行查询
// 执行查询方式2 - 查询多条记录
// 通过find方法执行query查询条件
List<person> peoples = mongoTemplate.find(
query(where("age").lt(50).and("accounts.balance").gt(1000.00d)), // 查询条件
Person.class // 查询对象, mongoTemplate将Person对象映射到对应的Mongodb集合中
);
// 执行查询方式3 - 查询一条记录
Person people = mongoTemplate.findOne(
query(where("age").lt(50).and("accounts.balance").gt(1000.00d)), // 查询条件
Person.class // 查询对象
);
说明:
- 通过Query对象可以设置查询条件、分页参数、指定返回字段,上面例子是通过Query.query静态方法,快速生成Query对象。
- 通过Criteria.where方法支持链式方法设置查询条件, Criteria对象封装了一系列方法,这些方法命名基本上跟MongoDB查询语法一一对应。
2.3.比较操作符
// qty = 20
query(where("qty").is(20))
// qty > 20
query(where("qty").gt(20))
// qty >= 20
query(where("qty").gte(20))
// qty < 20
query(where("qty").lt(20))
// qty <= 20
query(where("qty").lte(20))
// qty in (15, 20)
query(where("qty").in(Arrays.asList(15, 20)))
2.4.逻辑操作符
// and操作符 qty < 10 and qty > 1
query(where("qty").lt(10).andOperator(where("qty").gt(1)))
// or操作符 qty < 10 or title = 'tizi365'
query(where("qty").lt(10).orOperator(where("title").is("tizi365")))
3.分页查询
query(where("qty").lt(20))
.skip(10) // 跳过多少条记录, 相当于偏移量
.limit(10) // 每页返回多少数据
4.指定返回字段
query(where("qty").lt(20))
.skip(10) // 跳过多少条记录
.limit(10) // 每页返回多少数据
.fields().include("qty", "title").exclude("id") // 设置返回字段,include设置包含字段,exclude设置排除字段
5.统计分析
Java Mongodb的写法,基本上跟MongoDB聚合分析语法对应。
AggregationResults<PersonAgg> personAgg = mongoTemplate.aggregate(
Aggregation.newAggregation( // 创建一个pipeline
Aggregation.match(where("status").is("A")), // 设置查询条件
Aggregation.group("cust_id").sum("amount").as("total"), // 设置分组条件
Aggregation.sort(Sort.Direction.DESC, "total") // 设置排序条件
),
"person", // 集合名字
PersonAgg.class // 返回值类型,aggregate聚合分析返回什么数据,就定义个对应的对象保存数据即可
);
// 通过personAgg.getMappedResults() 获取聚合结果即可