mongoTemplate 联合查询
时间: 2023-05-27 14:02:01 浏览: 139
MongoTemplate 支持联合查询,即使用多个条件查询一个集合。以下是一些示例:
1. 使用 Criteria 对象联合查询
```java
Criteria criteria1 = Criteria.where("name").is("John");
Criteria criteria2 = Criteria.where("age").gte(18);
Query query = new Query();
query.addCriteria(new Criteria().andOperator(criteria1, criteria2));
List<User> users = mongoTemplate.find(query, User.class);
```
以上代码相当于 `db.getCollection("user").find({name: "John", age: {$gte: 18}})`。
2. 使用 where() 方法联合查询
```java
Query query = Query.query(
Criteria.where("name").is("John")
.and("age").gte(18)
);
List<User> users = mongoTemplate.find(query, User.class);
```
以上代码相当于 `db.getCollection("user").find({name: "John", age: {$gte: 18}})`。
3. 使用 @Query 注解联合查询
```java
@Query("{name: ?0, age: {$gte: ?1}}")
List<User> findByCriteria(String name, int age);
```
以上代码相当于 `db.getCollection("user").find({name: "John", age: {$gte: 18}})`,调用方式为 `findByCriteria("John", 18)`。
4. 使用 Aggregation 联合查询
```java
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(Criteria.where("name").is("John")),
Aggregation.project("name", "age")
);
AggregationResults<UserProjection> results = mongoTemplate.aggregate(aggregation, "user", UserProjection.class);
List<UserProjection> users = results.getMappedResults();
```
以上代码相当于 `db.getCollection("user").aggregate([{$match: {name: "John"}}, {$project: {name: 1, age: 1}}])`。注意,由于聚合操作返回的结果不是实体类的列表,而是一个自定义的投影类(UserProjection),因此需要使用 AggregationResults 来获取结果。
阅读全文