3.9、查询文档
MongoTemplate
提供了非常多的文档查询方法,日常开发中用的最多的就是find()
方法,示例代码如下:
- 查询集合中的全部文档数据
@RunWith(SpringRunner.class) @SpringBootTest public class PersonServiceTest { @Autowired private MongoTemplate mongoTemplate; /** * 查询集合中的全部文档数据 * @throws Exception */ @Test public void findAll() throws Exception { List<Person> result = mongoTemplate.findAll(Person.class); System.out.println("查询结果:" + result.toString()); } }
- 查询集合中指定的ID文档数据
@RunWith(SpringRunner.class) @SpringBootTest public class PersonServiceTest { @Autowired private MongoTemplate mongoTemplate; /** * 查询集合中指定的ID文档数据 * @throws Exception */ @Test public void findById() { long id = 1l; Person result = mongoTemplate.findById(id, Person.class); System.out.println("查询结果:" + result.toString()); } }
- 根据条件查询集合中符合条件的文档,返回第一条数据
@RunWith(SpringRunner.class) @SpringBootTest public class PersonServiceTest { @Autowired private MongoTemplate mongoTemplate; /** * 根据条件查询集合中符合条件的文档,返回第一条数据 */ @Test public void findOne() { String userName = "张三"; Query query = new Query(Criteria.where("userName").is(userName)); Person result = mongoTemplate.findOne(query, Person.class); System.out.println("查询结果:" + result.toString()); } }
- 根据条件查询集合中符合条件的文档
@RunWith(SpringRunner.class) @SpringBootTest public class PersonServiceTest { @Autowired private MongoTemplate mongoTemplate; /** * 根据条件查询集合中符合条件的文档 */ @Test public void findByCondition() { String userName = "张三"; Query query = new Query(Criteria.where("userName").is(userName)); List<Person> result = mongoTemplate.find(query, Person.class); System.out.println("查询结果:" + result.toString()); } }
- 根据【AND】关联多个查询条件,查询集合中的文档数据
@RunWith(SpringRunner.class) @SpringBootTest public class PersonServiceTest { @Autowired private MongoTemplate mongoTemplate; /** * 根据【AND】关联多个查询条件,查询集合中的文档数据 */ @Test public void findByAndCondition() { // 创建条件 Criteria criteriaUserName = Criteria.where("userName").is("张三"); Criteria criteriaPassWord = Criteria.where("passWord").is("123456"); // 创建条件对象,将上面条件进行 AND 关联 Criteria criteria = new Criteria().andOperator(criteriaUserName, criteriaPassWord); // 创建查询对象,然后将条件对象添加到其中 Query query = new Query(criteria); List<Person> result = mongoTemplate.find(query, Person.class); System.out.println("查询结果:" + result.toString()); } }
- 根据【OR】关联多个查询条件,查询集合中的文档数据
@RunWith(SpringRunner.class) @SpringBootTest public class PersonServiceTest { @Autowired private MongoTemplate mongoTemplate; /** * 根据【OR】关联多个查询条件,查询集合中的文档数据 */ @Test public void findByOrCondition() { // 创建条件 Criteria criteriaUserName = Criteria.where("userName").is("张三"); Criteria criteriaPassWord = Criteria.where("passWord").is("123456"); // 创建条件对象,将上面条件进行 OR 关联 Criteria criteria = new Criteria().orOperator(criteriaUserName, criteriaPassWord); // 创建查询对象,然后将条件对象添加到其中 Query query = new Query(criteria); List<Person> result = mongoTemplate.find(query, Person.class); System.out.println("查询结果:" + result.toString()); } }
- 根据【IN】关联多个查询条件,查询集合中的文档数据
@RunWith(SpringRunner.class) @SpringBootTest public class PersonServiceTest { @Autowired private MongoTemplate mongoTemplate; /** * 根据【IN】关联多个查询条件,查询集合中的文档数据 */ @Test public void findByInCondition() { // 设置查询条件参数 List<Long> ids = Arrays.asList(1l, 10l, 11l); // 创建条件 Criteria criteria = Criteria.where("id").in(ids); // 创建查询对象,然后将条件对象添加到其中 Query query = new Query(criteria); List<Person> result = mongoTemplate.find(query, Person.class); System.out.println("查询结果:" + result.toString()); } }
- 根据【逻辑运算符】查询集合中的文档数据
@RunWith(SpringRunner.class) @SpringBootTest public class PersonServiceTest { @Autowired private MongoTemplate mongoTemplate; /** * 根据【逻辑运算符】查询集合中的文档数据 */ @Test public void findByOperator() { // 设置查询条件参数 int min = 20; int max = 35; Criteria criteria = Criteria.where("age").gt(min).lte(max); // 创建查询对象,然后将条件对象添加到其中 Query query = new Query(criteria); List<Person> result = mongoTemplate.find(query, Person.class); System.out.println("查询结果:" + result.toString()); } }
- 根据【正则表达式】查询集合中的文档数据
@RunWith(SpringRunner.class) @SpringBootTest public class PersonServiceTest { @Autowired private MongoTemplate mongoTemplate; /** * 根据【正则表达式】查询集合中的文档数据 */ @Test public void findByRegex() { // 设置查询条件参数 String regex = "^张*"; Criteria criteria = Criteria.where("userName").regex(regex); // 创建查询对象,然后将条件对象添加到其中 Query query = new Query(criteria); List<Person> result = mongoTemplate.find(query, Person.class); System.out.println("查询结果:" + result.toString()); } }
- 根据条件查询集合中符合条件的文档,获取其文档列表并排序
@RunWith(SpringRunner.class) @SpringBootTest public class PersonServiceTest { @Autowired private MongoTemplate mongoTemplate; /** * 根据条件查询集合中符合条件的文档,获取其文档列表并排序 */ @Test public void findByConditionAndSort() { String userName = "张三"; Query query = new Query(Criteria.where("userName").is(userName)).with(Sort.by("age")); List<Person> result = mongoTemplate.find(query, Person.class); System.out.println("查询结果:" + result.toString()); } }
- 根据单个条件查询集合中的文档数据,并按指定字段进行排序与限制指定数目
@RunWith(SpringRunner.class) @SpringBootTest public class PersonServiceTest { @Autowired private MongoTemplate mongoTemplate; /** * 根据单个条件查询集合中的文档数据,并按指定字段进行排序与限制指定数目 */ @Test public void findByConditionAndSortLimit() { String userName = "张三"; //从第一行开始,查询2条数据返回 Query query = new Query(Criteria.where("userName").is(userName)).with(Sort.by("createTime")).limit(2).skip(1); List<Person> result = mongoTemplate.find(query, Person.class); System.out.println("查询结果:" + result.toString()); } }
- 统计集合中符合【查询条件】的文档【数量】
@RunWith(SpringRunner.class) @SpringBootTest public class PersonServiceTest { @Autowired private MongoTemplate mongoTemplate; /** * 统计集合中符合【查询条件】的文档【数量】 */ @Test public void countNumber() { // 设置查询条件参数 String regex = "^张*"; Criteria criteria = Criteria.where("userName").regex(regex); // 创建查询对象,然后将条件对象添加到其中 Query query = new Query(criteria); long count = mongoTemplate.count(query, Person.class); System.out.println("统计结果:" + count); } }