Spring Data MongoDB 教程

简单查询文档

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)
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号