MongoRepository查询数据常用语法
安装
查看mongo可用版本
docker search mongo
安装指定版本的mogo或者拉取最新版本的镜像
docker pull mongo:latest
或者官网下载安装包
https://www.mongodb.com/try/download/community-kubernetes-operator
下载完成解压至自己的目录
tar -zxvf mongodb-macos-x86_64-4.2.18.tgz
创建mongo数据持久化目录
sudo mkdir -p /usr/local/var/mongodb
创建mongo数据库日志目录
sudo mkdir -p /usr/local/var/log/mongodb
分配权限
sudo chown my_mongodb_user /usr/local/var/mongodb
sudo chown my_mongodb_user /usr/local/var/log/mongodb
运行mongod服务
mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log --fork
查看是否启动成功
ps aux | grep -v grep | grep mongod
shell操作mongo
mongo
初次安装,只有几个默认的数据库

springboot程序查询mongo可以借助MongoRepository或者MongoTemplate
这里的MongoRepository跟spring data jpa很像,由于继承了CrudRepository或者ListCrudRepository和QueryByExampleExecutor所以基本的增删改查操作都可以直接调用方法来实现
如果使用MongoRepository多字段条件查询时可能会很复杂,使用MongoTemplate查询更为方便,这两者的使用得依靠自己来区分哪种方式更为方便
比如一般的分页以及排序查询MongoRepository更为方便一些


而mongoTemplate只能靠mongoTemplate.query()来实现分页的查询

spring data jpa
interface PersonRepository extends Repository<Person, Long> {
List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);
// Enables the distinct flag for the query
List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);
// Enabling ignoring case for an individual property
List<Person> findByLastnameIgnoreCase(String lastname);
// Enabling ignoring case for all suitable properties
List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);
// Enabling static ORDER BY for a query
List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
List<Person> findByLastnameOrderByFirstnameDesc(String lastname);
}
解析查询的方法名称分为主语和谓语find…By,exists…By),第二部分形成谓词,可以进一步操作如,find(或其他引入关键字)和By之间的任何文本可认为形容词,除非使用结果限制关键字,如Distinct在要创建的查询上设置不同的标志,如根据用户名去重复(findDistinctByUsername)或者使用Top/First来限制查询结果(findFirstByUsername),排序之后取前3条数据(findTop3ByOrderByCreateTimeDesc)。
Repository中的特殊参数
除了基本类型参数,还可以支持Pageable和 Sort来进行分页和排序
Page<User> findByLastname(String lastname, Pageable pageable);
Slice<User> findByLastname(String lastname, Pageable pageable);
List<User> findByLastname(String lastname, Sort sort);
List<User> findByLastname(String lastname, Pageable pageable);
分页
使用Pageable参数来进行分页,使用sort来排序,因为page分页需要根据总数来进行分页计算,判断总共多少页,是否有下一页等等,如果只想分页,不需要知道总共多少页,可使用slice实现,根据属性hasNext判断是否有下一次分页即可,因为计算总页数需要总条数,使用page来接受会额外花费一次count查询


如果只需要排序,可以在方法参数添加sort,可以使用page也可以使用list接受

在jpa查询中,如果添加了pageable,但是不想分页查询,可以使用Pageable.unpaged(),如果不想使用排序可以使用Sort.unsorted(),如果传入null值会报NPE
排序
定义排序表达式,可以多个条件同时排序
Sort sort = Sort.by("firstname").ascending().and(Sort.by("lastname").descending());
lambda条件表达式
TypedSort<Person> person = Sort.sort(Person.class);
Sort sort = person.by(Person::getFirstname).ascending().and(person.by(Person::getLastname).descending());
条数限制
在find...By中间可以使用其他限制词,比如first或者top关键词来限制查询结果的条数,如果只写first或者top,默认为1条,即findByFirst1 = findByFirst
User findFirstByOrderByLastnameAsc();
User findTopByOrderByAgeDesc();
Page<User> queryFirst10ByLastname(String lastname, Pageable pageable);
Slice<User> findTop3ByLastname(String lastname, Pageable pageable);
List<User> findFirst10ByLastname(String lastname, Sort sort);
List<User> findTop10ByLastname(String lastname, Pageable pageable);
如果是单条查询,如findFirstByOrderByLastnameAsc可以将返回结果使用Optional来包装避免NPE
Optional<User> findFirstByOrderByLastnameAsc();
MongoRepository查询数据常用语法的更多相关文章
- MySQL 查询数据
MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...
- SQL查询数据总结
SQL查询数据 完整语法 Select [select选项] 字段列表[字段别名]/* from 数据源 [where条件子句] [group by子句] [having子句] [order by子句 ...
- 十二、MySQL 查询数据
MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 查询数据
MySQL 数据库使用SQL SELECT语句来查询数据. 可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MySQL数据库中查询数据通用 ...
- Thymeleaf常用语法:数据延迟加载
在处理模板时,可以由模板逻辑决定是否加载数据,以提高性能.在Spring Boot控制器中设置数据时,使用LazyContextVariable可以实现这功能. 开发环境:IntelliJ IDEA ...
- Oracle常用语法
Oracle常用语句语法汇总 Oracle10g 1 第一章Oracle命令 a) 系统管理员连接 conn */* as sysdba b) 查询当前用户 show user c) 创建新用户 cr ...
- Sql常用语法以及名词解释
Sql常用语法以及名词解释 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) D ...
- sql 常用语法汇总
Sql常用语法 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控 ...
- MySQL查询数据表中数据记录(包括多表查询)
MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...
- SQL基础常用语法
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 DROP database dbname 3.说明:创建新表 create table ...
随机推荐
- picture --攻防世界
题目描述: 下载得到附件 解题思路: (1)将图片放入winnhex中查看 发现这是一张jpeg图片,修改文件后缀尾.jpg 或者使用binwalk分析 (2)binwalk分离图片 foremost ...
- get 和 post 请求在缓存方面的区别
get 请求类似于查找的过程,用户获取数据,可以不用每次都与数据库连接,所以可以 使用缓存. post 不同,post 做的一般是修改和删除的工作,所以必须与数据库交互,所以不能使用 缓存.因此 ge ...
- 小凡的Python之路——启航
小凡,经过自己的努力考上了一所普通的二本大学.高考填写志愿的时候,根本不知道选择什么专业,稀里糊涂的被调剂到"应用统计学". 老师和同学都说,现在是大数据时代,数据分析现在是热门岗 ...
- sqlserver将查询中一行内容转化为多行内容
WITH CTE AS( SELECT top 5 TaskID ,Attachments from [V_AllAccessoriesAompression])SELECT a.TaskID,c.A ...
- 1.2 C语言--函数与数组
函数 函数的定义 返回值类型函数名(类型形参名[,--]){ 函数体 } 除了没有访问修饰符外,基本等同于java的函数. 良好的程序设计风格要求即使没有返回值,也要使用return;作为最后一条语句 ...
- python起航之路 Day1
一.Python安装 windows 1.下载安装包 https://www.python.org/downloads/2.安装 默认安装路径:C:\python273.配置环境变量 [右键计算机]- ...
- 自动化测试工具selenium的常用定位方法
定位方法不仅限于这些,我也会随时补充,大家有其他补充或建议可以在评论区一起讨论哦!!! [打开链接]drive.get("https://www.baidu.com") ...
- SQL之rand,round,floor,ceiling,cast小数处理函数
rand():取随机数,select rand() from T 结果:0.635811742495648 round():保留N位小数,四舍五入 select round(1.0446,N) flo ...
- FPGA串口 波特率的计数器值
开发板时钟为50Mhz, t为 20ns; xxx波特率时指每秒传xxx bit字节数据.也就是T=1/xxx; 再用T/t就可以得出波特率的计数周期了: 例如9600:T=1/96000=1.041 ...
- Leetcode209
209. Minimum Size Subarray Sum i , s , l = 0, 0, 0 for j in range(len(nums)): ...