MongoDB 5.X学习
1.1安装
bibibi
https://www.bilibili.com/video/BV1vL4y1J7i3?p=6&spm_id_from=pageDriver
官方文档
https://docs.mongodb.com/manual/tutorial/getting-started/
存储的数据库类型
json(bson)
非关系型文档数据库。
安装包下载
https://www.mongodb.com/try/download/community
上传到centos7
解压:# tar -zxvf mongodb-linux-x86_64-.tgz
进入目录:# cd mongodb5/
重命名文件: mongodb
在mongodb下创建目录:# mkdir mongodbserver
进入mongodbserver目录
创建数据库目录:# mkdir data
创建日志目录:mkdir logs
在mongodbserver文件夹下创建配置文件目录:# mkdir etc
进入etc目录:# cd etc
创建配置文件:# vi mongodb.conf
dbpath=../data(要加绝对路劲,..会报错)
logpath=../logs/mongodb.log
port=27017
bind_ip=0.0.0.0
进入bin目录启动:./mongod --config ../mongodbserver/etc/mongodb.conf
登录客户端/bin: ./mongo --port=27017
查看默认库: show dbs
挂载到后台
nohup ./mongod --config ../mongodbserver/etc/mongodb.conf &
1.2 核心概念
1.2.1 库
和mysql库类似;
1.2.2 集合
类似于表结构;放的是集合;
1.2.3文档
存在一条条记录,json格式(bson)
1.3基本操作
1.3.1库的操作
查看所有库
show databases;
创建(切换)一个库(创建并使用)
use 库名;
查看当前所在的库
db;
删除数据库(当前进入的数据库);清空库,逻辑删除
db.dropdatabase();
1.3.2集合的操作(类似于表)
进入一个库
use baizhi;
查看集合
show tables;
show collections;
创建集合
db.createCollection('users');
删除集合
db.集合名称.drop()
1.3.3文档的操作(json)
进入某个集合
插入文档
插入单条文档(键值对,键可以不用加"")
db.集合名称.insert({"name":"123",age:23,bir:"123w"})
脚本支持插入
es6 javascript语法
查询所有的文档
db.集合名称.find();
删除文档
db.集合名称.remove(
{
<query>,//条件
justone:<boolean>,
wtrteConcern:<document>
});
什么都不传:删除所有: db.集合名称.remove({}});
更新文档, \(set先保留再更新;如果不加\)set,就是先删除再更新
db.集合名称.update({
<query>,
<update>,
{
upsert:<boolean>,
multi:<boolean>,
writeConcern:<document>
}
});
文档的查询
db.集合名称.find(query,projection).pretty(数据进行格式化)
条件查询
小于:$lt
相同键,后一个或覆盖前面一个
或者 $or:[多个条件]
模糊查询
使用正则表达式
$size查询符合长度的
1.4 索引
创建索引
db.users.createindex({name:1});
查看索引
db.users.getIndexs();
复合索引
索引的值,多个key共同组成的
1.5 聚合
处理数据:平均值,求和
db.集合名称.aggregate([{$group:{_id:"$by_user",'sum_by_user':{$sum:1}}}])
1.6 使用navicat连接数据库
传统方式安装没有开启远程连接权限;
docker默认是开启的;
config
bind_ip=0.0.0.0
1.7springboot整合mongodb
spring data 操作
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
编写配置
data:
mongodb:
database: chengqiang
host: 111.229.91.20
port: 27017
# username: xxxx
# password: xxxx
测试
1.7.1 集合操作
@Autowired
public DemoApplicationTests(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
//测试mongodb
private MongoTemplate mongoTemplate;
//1.创建集合
@Test
public void testCreateCollextion(){
mongoTemplate.createCollection("products");
}
}
//2.删除集合
@Test
public void testDropCollection(){
mongoTemplate.dropCollection("products");
}
相关注解
@Ducument("users") :类的实例对象隐射转化为文档
@Id:成员变量的值映射为文档的_id的值
@Field(”username"):指定文档中key的名称,默认为成员变量名
@Transient:不参与文档的序列化
1.7.2 文档操作
插入数据
mongoTemplate.insert(user);//插入重复数据时,insert会报主键重复,save对已存在的数据进行更新;一次性全部插入,效率高
mongoTemplate.save(user);//对已经存在的数据进行更新,一个个插入数据,效率低
查询
1、查询所有
mogoTemplate.findAll(User.class);
List<User> users = mongoTemplate.findAll(User.class,"users");
users.forEeach(System.oout::println);
2、基于id查询一个
User user =mongoTemplate.findById(1,User.class);
3、条件查询:大于小于等于
List<User> users=mongoTemplate.find(Query.query(Criteria.where("salary").lt(23000)),User.class);
4、and 查询
List<User> users=mongoTemplate.find(Query.query(Criteria.where("salary").lt(23000)).and("salary").is("2300"),User.class);
5、or查询
Criteria criteria= new Criteria();
criteria.orOpetator(
Criteria.Where("name").is("chengqinag"),
Criteria.Where("name").is("chenglan"),
);
List<User> users=mongoTemplate.find(Query.query(criteria),User.class);
排序
Query querySort = new Query();
querySort.with(Sort.by(Sort.Order.asc("salary")));
List<User> users=mongoTemplate.find(querySort,User.class);
分页
Query querySort = new Query();
querySort.with(Sort.by(Sort.Order.asc("salary")))
.skip(0)
.limit(2);
List<User> users=mongoTemplate.find(querySort,User.class);
总条数
mongoTemplate.count(new query(),User.class);
去重
mongoTemplate.findDistinct(t(new query(),"name",User.class,String.class);