安装

查看mongo可用版本

安装指定版本的mogo或者拉取最新版本的镜像

或者官网下载安装包
https://www.mongodb.com/try/download/community-kubernetes-operator
下载完成解压至自己的目录

创建mongo数据持久化目录

创建mongo数据库日志目录

分配权限
sudo chown my_mongodb_user /usr/local/var/mongodb
sudo chown my_mongodb_user /usr/local/var/log/mongodb
运行mongod服务

查看是否启动成功

shell操作mongo

初次安装,只有几个默认的数据库
MongoRepository查询数据常用语法-LMLPHP

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

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查询
MongoRepository查询数据常用语法-LMLPHP
MongoRepository查询数据常用语法-LMLPHP
如果只需要排序,可以在方法参数添加sort,可以使用page也可以使用list接受
MongoRepository查询数据常用语法-LMLPHP

排序

定义排序表达式,可以多个条件同时排序

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();
03-09 20:53