MongoDB 中的比较操作符用于比较两个值之间的关系,如:大于、等于等。常见的比较操作符有 $eq(等于)、$ne(不等于)、$gt(大于)、$gte(大于等于)、$lt(小于)和 $lte(小于等于)等等。比较操作符详细说明如下:
$eq 匹配等于指定的值,例如:db.t_01.find( { "name": { $eq:"david" } } )
$gt 匹配大于指定的值,例如:db.t_01.find( { "age" : { $gt: 30 } } )
$gt 匹配大于或等于指定的值,例如:db.t_01.find( { "age" : { $gte: 30 } } )
$in 匹配数组中的任意一个值,例如:db.t_01.find( { "age" : { $in : [ 30,40 ] } } )
$lt 匹配小于指定的值,例如:db.t_01.find( { "age" : { $lt: 30 } } )
$lte 匹配小于等于指定的值,例如:db.t_01.find( { "age" : { $lte: 30 } } )
$ne 匹配不等于指定值的所有值,例如:db.t_01.find( { "age" : { $ne: 30 } } )
$nin 匹配不在数组中出现的值,例如:db.t_01.find( { "age" : { $nin : [ 30,40 ] } } )
下面将介绍 Criteria 类中对比较操作符的定义,方法详细定义如下:
Criteria is(Object value) 等于
Criteria gt(Object value) 大于,使用 $gt 操作符创建一个 Criteria。
Criteria gte(Object value) 大于等于,使用 $gte 操作符创建一个 Criteria。
Criteria lt(Object value) 小于,使用 $lt 操作符创建一个 Criteria。
Criteria lte(Object value) 小于等于,使用 $lte 操作符创建一个 Criteria。
Criteria in(Object... values) 使用 $in 操作符创建一个 Criteria
Criteria in(Collection<?> values) 使用 $in 操作符创建一个 Criteria
Criteria isNull() 创建一个使用 null 进行相等性比较的 Criteria,匹配包含字段的值为 null 或不包含该字段的文档。
Criteria isNullValue() 创建一个使用 BsonType 进行比较的 Criteria,只匹配包含该字段的文档,其值等于 BsonType.NULL。
Criteria ne(Object value) 使用 $ne 操作符创建一个 Criteria
Criteria nin(Object... values) 使用 $nin 操作符创建一个 Criteria
Criteria nin(Collection<?> values) 使用 $nin 操作符创建一个 Criteria
下面将演示如何使用 Criteria 类的 is()、gt()、gte()、lt()、lte() 方法过滤数据,代码如下:
package com.hxstrive.springdata.mongodb; import com.hxstrive.springdata.mongodb.entity.Person; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import java.util.List; @SpringBootTest class CriteriaDemo { @Autowired private MongoTemplate mongoTemplate; @BeforeEach public void init() { // 删除集合 mongoTemplate.dropCollection(Person.class); // 准备数据 mongoTemplate.insert(Person.builder().id(100).name("Tom").age(27).email("Tom@sina.com").build()); mongoTemplate.insert(Person.builder().id(200).name("Helen").age(30).email("Helen@outlook.com").build()); mongoTemplate.insert(Person.builder().id(300).name("Bill").age(47).email("bill@gmail.com").build()); mongoTemplate.insert(Person.builder().id(400).name("Joe").age(20).email("joe@163.com").build()); } @Test public void is() { // 查询 name 等于 Tom 的用户信息 List<Person> personList = mongoTemplate.query(Person.class) .matching(Query.query(Criteria.where("name").is("Tom"))).all(); for(Person person : personList) { System.out.println(person); } } @Test public void gt() { // 查询 age 大于 30 的用户信息 List<Person> personList = mongoTemplate.query(Person.class) .matching(Query.query(Criteria.where("age").gt(30))).all(); for(Person person : personList) { System.out.println(person); } } @Test public void gte() { // 查询 age 大于等于 30 的用户信息 List<Person> personList = mongoTemplate.query(Person.class) .matching(Query.query(Criteria.where("age").gte(30))).all(); for(Person person : personList) { System.out.println(person); } } @Test public void lt() { // 查询 age 小于 30 的用户信息 List<Person> personList = mongoTemplate.query(Person.class) .matching(Query.query(Criteria.where("age").lt(30))).all(); for(Person person : personList) { System.out.println(person); } } @Test public void lte() { // 查询 age 小于等于 30 的用户信息 List<Person> personList = mongoTemplate.query(Person.class) .matching(Query.query(Criteria.where("age").lte(30))).all(); for(Person person : personList) { System.out.println(person); } } }