Spring Data MongoDB 中,你可以使用 Query 和 Criteria 类来表示查询。它们的方法名称和 MongoDB 的本地操作符名称一致,例如 lt、lte、is 等。
Query 和 Criteria 类遵循链式风格的 API,因此你可以将多个方法和查询链接起来。 为了提高可读性,静态导入让你避免使用 'new' 关键字来创建 Query 和 Criteria 类的实例。当然,你也可以使用 BasicQuery 从普通的 JSON 字符串中创建 Query 实例。
使用 BasicQuery 通过 JSON 字符串构建 “年龄小于30,名称包含‘l’字符” 的查询条件。如下:
(1)Person 实体代码
package com.hxstrive.springdata.mongodb.entity; import lombok.Builder; import lombok.Data; import lombok.ToString; import org.springframework.data.annotation.TypeAlias; import org.springframework.data.annotation.Version; import org.springframework.data.mongodb.core.mapping.Document; /** * 用户 * @author hxstrive.com */ @Document("person") @TypeAlias("pers") @Data @Builder @ToString public class Person extends Contact { /** ID,自动映射到 MongoDB 的 _id 字段 */ private String id; /** 姓名 */ private String name; /** 年龄 */ private int age; /** 版本 */ @Version private long version; }
(2)客户端代码,通过 MongoTemplate 查询数据,代码如下:
package com.hxstrive.springdata.mongodb.query; import com.hxstrive.springdata.mongodb.entity.Person; 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.BasicQuery; import java.util.List; @SpringBootTest public class BasicQueryTest { @Autowired private MongoTemplate mongoTemplate; @Test public void contextLoads() { // 删除集合,清空数据 mongoTemplate.dropCollection(Person.class); // 准备数据 mongoTemplate.insert(Person.builder().id("1").name("Tom").age(22).build()); mongoTemplate.insert(Person.builder().id("2").name("Helen").age(29).build()); mongoTemplate.insert(Person.builder().id("3").name("Bill").age(37).build()); mongoTemplate.insert(Person.builder().id("4").name("Joe").age(48).build()); // 查询数据 // 年龄小于30岁,且名称中包含 “l” 字符 BasicQuery query = new BasicQuery("{ age : { $lt : 30 }, name : { $regex : 'l' }}"); List<Person> result = mongoTemplate.find(query, Person.class); for(Person person : result) { System.out.println(person); } } }
运行代码,输出如下:
Person(id=2, name=Helen, age=29, version=1)