一架梯子,一头程序猿,仰望星空!
Java MongoDB教程 > 内容正文

Java MongoDB查询文档


本章介绍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() 获取聚合结果即可