- 1.Docker安装MongoDb
- 2.数据库 *** 作
- 3.集合 *** 作
- 4.文档 *** 作
- 5.SpringBoot集成MongoDB
- 5.1.基于MongoTemplate 的CRUD
- 5.2.基于MongoRepository的CRUD
MongoDB中文文档
SQL术语 | MongoDB术语 | 说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
注意
- 文档中的键/值对是有序的
- MongoDB区分类型和大小写
- MongoDB的文档不能有重复的键
- 键不能含有
- .和$有特别的意义,只有在特定环境下才能使用 (空字符)。这个字符用来表示键的结尾
- 以下划线"_"开头的键是保留的(不是严格要求的) #拉取镜像
docker
#创建和启动容器 pull mongo:latest
docker
= run -d --restart27017always -p #进入容器 :27017 --name mymongo -v /data/db:/data/db -d mongo
docker
exec #使用MongoDB客户端进行 *** 作 -it mymongo/bin/bash
#查询所有的数据库
mongo
db.help()
show dbs
2.数据库 *** 作
- Help查看命令提示
use 数据库名
- 切换/创建数据库
show dbs
- 查询所有数据库
db.getName()
- 查看当前使用的数据库
db.stats()
- 显示当前db状态
db.version()
- 当前db版本
db.getMongo
- 查看当前db的链接机器地址
db.dropDatabase()
- 删除当前使用数据库
db.createCollection( "集合名")
- 创建集合(表)
show collections
- 查看数据库中所有集合(表)
db.getCollection("集合名")
- 得到指定名称的集合
db.printCollectionStats()
- 查看集合状态
db.集合名.drop()
- 删除集合
db.集合名.save({name:'zhangsan',age:21,sex:true})
- 插入文档
db.集合名.find()
- 查询所有文档
- 条件查询 (
db.User.find"zhangsan"{name:})select
相当于
= * from User where name 'zhangsan' ;(
db.User.find}{age:21'name', {'age':1, }:1)select
相当于
= name, age from User where age 21 ;(
db.User.find)(.sort}{age:1)select
相当于
; * from User order by age(
db.User.find)(.skip0)(.limit3)select
相当于
2 * from User skip 3 limit (;
db.User.find$in{age:{[:21,26],32}})select
相当于
in * from User where age ( 2126, 32, )(;
db.User.find$gt{age:{}:20})(.count)select
相当于
( count)*20 from User where age >;(
db.User.find$or{[:}{age:21}, {age:28]})select
相当于
= * from User where age 21 = or age 28 (
db.User.find"zs"{name:}, age:28)select
相当于
= * from User where name 'zs'= and age 28 ;更新文档
- (
db.User.update"zhangsan"{name:}$set, {}:{age:100, sex:0})=
相当于
update Userset age 100 =, sex 0 = where name 'user1' 删除文档
- (
根据id删除
db.User.remove)id(
删除所有
db.User.remove}{)聚合 *** 作
描述 | 实例 | $sum |
---|---|---|
计算总和 | db.mycol.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$sum : “$likes”}}}]) | $avg |
计算平均值 | db.mycol.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$avg : “$likes”}}}]) | $min |
获取集合中所有文档对应值得最小值 | db.mycol.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$min : “$likes”}}}]) | $max |
获取集合中所有文档对应值得最大值 | db.mycol.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$max : “$likes”}}}]) |
- 创建索引 <
1、创建SpringBoot工程
2、导入依赖
<dependency>
groupId>org.springframework.boot<groupId>
artifactId>spring-boot-starter-data-mongodb<artifactId>
version>2.6.6version>
#配置mongoDB地址dependency>
3、配置文件application.yml中添加
spring
:data
:mongodb
:#mongodb://192.168.140.100:27017/数据名.集合名
uri
:: mongodb://192.168.140.100添加文档 27017/why_datebase.test
5.1.基于MongoTemplate 的CRUD
- @Autowired
private
MongoTemplate ; mongoTemplate@Test
void
testInsert ()User {
= user new User ();.
usersetName("陈三");.
usersetAge(25);//向User表中插入数据
User
= user1 . mongoTemplateinsert()user;}
查询表中所有文档
- @Test
void
testFind ()List{
<User=> all . mongoTemplatefindAll(User.class);for
( User: user ) allSystem {
..errprintln()user;}
}
根据id查询
- @Test
void
testFindById ()//根据id查询{
User
= user . mongoTemplatefindById("625c06dae63b0056f5f21fc8",User .class);System
..errprintln()user;}
and查询
- @Test
void
findUserListAnd ()Query{
= query new Query (Criteria.where("name").is("张三").and("age").is(25));//条件查询 where name = '张三' and age = 25
List
<User=> users . mongoTemplatefind(,queryUser .class);System
..errprintln()users;}
or查询
- @Test
void
findUserListOr ()//条件查询:where name = '张三' or id = ‘625c066b8d584444626116ae’{
Criteria
= name Criteria .where("name").is("张三");Criteria
= id Criteria .where("id").is("625c066b8d584444626116ae");Criteria
= criteria new Criteria ();//合并or的查询条件
.
criteriaorOperator(,name)id;Query
= query new Query ();.
queryaddCriteria()criteria;List
<User=> users . mongoTemplatefind(,queryUser .class);System
..errprintln()users;}
模糊查询
- @Test
void
testLike ()String{
= name "三" ;String
= regex String .format("%s%s%s","^.*",,name".*$");//Pattern.CASE_INSENSITIVE : 忽略大小写
Pattern
= pattern Pattern .compile(,regexPattern.)CASE_INSENSITIVE;Query
= query new Query (Criteria.where("name").regex()pattern);//这样写也可以
//Query query = new Query(Criteria.where("name").regex("三"));
//模糊查询 where name like '三'
List
<User=> users . mongoTemplatefind(,queryUser .class);for
( User: user ) usersSystem {
..errprintln()user;}
}
分页查询
- @Test
void
findPage ()//分页查询{
Integer
= pageNo 1 ;Integer
= pageSize 2 ;Query
= query new Query (Criteria.where("age").is(25));//查询记录数
long
= count . mongoTemplatecount(,queryUser .class);System
..errprintln("表中记录数量为:"+)count;//分页 skip:指定起始页,limit:指定每页记录数
.
queryskip((-pageNo1)*)pageSize.limit()pageSize;List
<User=> users . mongoTemplatefind(,queryUser .class);for
( User: user ) usersSystem {
..errprintln()user;}
}
更新文档
- @Test
void
testUpdate ()//根据id查询记录{
User
= user . mongoTemplatefindById("625cfda8fe25dc25be4edd26",User .class);//设置要修改的值
.
usersetName("裂空座");.
usersetAge(30);.
usersetEmail("246786324@qq.com");//修改
Query
= query new Query (Criteria.where("id").is(.usergetId()));Update
= update new Update ();.
updateset("name",.usergetName());.
updateset("age",.usergetAge());.
updateset("email",.usergetEmail());UpdateResult
= upsert . mongoTemplateupsert(,query, updateUser .class);long
= matchedCount . upsertgetMatchedCount();System
..errprintln("影响行数:"+)matchedCount;}
删除文档
- @Test
void
testRemove ()Query{
= query new Query (Criteria.where("id").is("625cf65138b887613da7d143"));DeleteResult
= remove . mongoTemplateremove(,queryUser .class);long
= deletedCount . removegetDeletedCount();System
..errprintln("删除记录数量:"+)deletedCount;}
插入文档
5.2.基于MongoRepository的CRUD
- @Autowired
private
UserRepository ; userRepository@Test
void
testInsert ()User {
= user new User ();.
usersetName("水箭龟");.
usersetAge(12);User
= save . userRepositorysave()user;System
..errprintln()save;}
查询所有
- @Test
void
testFind ()//查询User表中所有数据{
List
<User=> users . userRepositoryfindAll();for
( User: user ) usersSystem {
..errprintln()user;}
}
根据Id查找
- @Test
void
testFindById ()//根据id查询{
User
= user . userRepositoryfindById("625cf664e8279d312cf32095").get();System
..errprintln()user;}
and查询
- @Test
void
findUserListAnd ()//条件查询 where name = '喷火龙' and age = 11{
User
= user new User ();.
usersetName("喷火龙");.
usersetAge(11);Example
<User=> example Example .of()user;List
<User=> users . userRepositoryfindAll()example;for
( User: user1 ) usersSystem {
..errprintln()user1;}
}
模糊查询
- @Test
void
testLike ()//模糊查询 where email like '126'{
//设置模糊查询的匹配规则
ExampleMatcher
= matcher ExampleMatcher .matching().
withStringMatcher(.ExampleMatcher.StringMatcher)CONTAINING//containing包含 .
withIgnoreCase(true);//忽略大小写User
= user new User ();.
usersetEmail("126");Example
<User=> example Example .of(,user)matcher;List
<User=> users . userRepositoryfindAll()example;for
( User: user1 ) usersSystem {
..errprintln()user1;}
}
分页查询
- @Test
void
findPage ()//分页查询{
//page:0表示第一页,1表示第二也......
Pageable
= pageable PageRequest .of(1,3 );Page
<User=> page . userRepositoryfindAll()pageable;int
= totalPages . pagegetTotalPages();List
<User=> users . pagegetContent();long
= totalElements . pagegetTotalElements();System
..errprintln("总页数:"+)totalPages;System
..errprintln()users;System
..errprintln("总记录条数:"+)totalElements;}
更新文档
- @Test
void
testUpdate ()//根据id查询记录{
User
= user . userRepositoryfindById("625cf664e8279d312cf32095").get();.
usersetAge(20);.
usersetEmail("8888888@qq.com");//修改
//save(): 如果id值存在就修改,如果id值不存在就添加
User
= save . userRepositorysave()user;System
..errprintln()save;}
删除文档
- @Test
void
testRemove ().{
userRepositorydeleteById("625cf77371fb253316589586");//userRepository.deleteAll(); 删除所有
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)