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);
posted @ 2022-02-08 14:13  成强  阅读(173)  评论(0编辑  收藏  举报