Spring Data MongoDB - 查询指南

转自: http://www.baeldung.com/queries-in-spring-data-mongodb

1.概述

本文将着重于在Spring Data MongoDB中构建不同类型的查询。

我们将查询使用QueryCriteria类,自动生成的查询方法JSON查询QueryDSL查询文档。

1.1 Maven的依赖

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>1.9.6.RELEASE</version>
</dependency>

2.Documents Query

使用Spring Data查询MongoDB的更常用方法之一是使用Query和Criteria类 - 它们非常接近本地操作符。下面是示例数据↓↓↓

[
    {
        "_id" : ObjectId("55c0e5e5511f0a164a581907"),
        "_class" : "org.baeldung.model.User",
        "name" : "Eric",
        "age" : 45
    },
    {
        "_id" : ObjectId("55c0e5e5511f0a164a581908"),
        "_class" : "org.baeldung.model.User",
        "name" : "Antony",
        "age" : 33
    },
    {
        "_id" : ObjectId("55c0e5e5511f0a164a581909"),
        "_class" : "org.baeldung.model.User",
        "name" : "Alice",
        "age" : 35
    }
]

2.1 Is

现在让我们看看查询代码:

Query query = new Query();
query.addCriteria(Criteria.where("name").is("Eric"));
List<User> users = mongoTemplate.find(query, User.class);

2.2 regex 正则表达式

现在让我们创建查询:在正在查找名称以A开头的所有用户。

Query query = new Query();
query.addCriteria(Criteria.where("name").regex("^A"));
List<User> users = mongoTemplate.find(query,User.class);

这里是另一个简单的例子,这次查找名称以c结尾的所有用户:

Query query = new Query();
query.addCriteria(Criteria.where("name").regex("c$"));
List<User> users = mongoTemplate.find(query, User.class);

Lt和gt 小于和大于

我们正在寻找年龄在20到50之间的所有用户:

Query query = new Query();
query.addCriteria(Criteria.where("age").lt(50).gt(20));
List<User> users = mongoTemplate.find(query,User.class);

2.4 sort 排序

返回按年龄升序排列的所有用户:

Query query = new Query();
query.with(new Sort(Sort.Direction.ASC, "age"));
List<User> users = mongoTemplate.find(query,User.class);

2.5 分页

final Pageable pageableRequest = new PageRequest(0, 2);
Query query = new Query();
query.with(pageableRequest);
List<User> users = mongoTemplate.find(query,User.class);

3 Mongo JSON查询方法 - 使用@Query注释。

3.1 FindBy

让我们先从简单的,看看一个通过查找类型的方法

@Query("{ 'name' : ?0 }")
List<User> findUsersByName(String name);

此方法应该按名称返回用户 - 占位符?0 引用该方法的第一个参数。

List<User> users = userRepository.findUsersByName("Eric");

3.2 $regex 正则表达式

正则表达式驱动的查询

@Query("{ 'name' : { $regex: ?0 } }")
List<User> findUsersByRegexpName(String regexp);

用法也完全一样:

List<User> users = userRepository.findUsersByRegexpName("^A");

List<User> users = userRepository.findUsersByRegexpName("c$");

3.3 $lt 和 $gt

@Query("{ 'age' : { $gt: ?0, $lt: ?1 } }")
List<User> findUsersByAgeBetween(int ageGT, int ageLT);

原始查询中的索引来引用每个参数:?0和?1。

List<User> users = userRepository.findUsersByAgeBetween(20, 50);

猜你喜欢

转载自blog.csdn.net/m0_37893932/article/details/79640181
今日推荐