mongodb学习纪要

706 阅读3分钟

1. 背景

第一次接触mongo,因为公司要做一个数据清洗投递的项目,需要把一些数据以json的方式存储下来,很明显mysql不是很合适,当然mysql也支持json数据,所以选择了mongo,借此机会也学习一下

2. 学习资料

我参考的资料:www.bilibili.com/video/BV1vL…

极客时间:/Users/jlgl/Downloads/软件/26-MongoDB高手课,看到第5讲了

3. linux本地安装

3.1 demo1

安装包下载地址:www.mongodb.com/try/downloa…

我的云机器安装的地址:/opt/mongodb_test/mongodb

启动命令:./mongod --port=27017 --dbpath=../data --logpath=../logs/mongo.log

需要自己建一下data和logs两个目录

--port: 指定服务器监听端口号,默认27017

--dbpath:指定mongodb数据存放目录

--logpath:指定mongodb日志文件存放位置

image.png

客户端连接命令:./mongo --port=27017

image.png

3.2 demo2

使用demo1 的时候发现了个问题,无法远程连接,后来参考了这个demo: blog.csdn.net/weixin_4352…

启动命令:./bin/mongod -f /mongodb/single/mongod.conf

查看服务进程: ps -ef |grep mongod

4. docker安装

进入dockerhub查看镜像:hub-stage.docker.com/_/mongo/tag…

docker pull mongo:5.0.5

docker run --name mongo -d -p 27017:27017 mongo:5.0.5

docker exec -it f2a562f1418b /bin/bash

docker start f2a562f1418b

docker stop f2a562f1418b

docker 安装有些问题,没有办法修改mongo.conf 所以放弃

5. 相关概念

RDBMSMongDB
数据库数据库
集合
文档
字段

5. 相关操作命令

5.1 库的相关操作命令

show dbs;

use yawu_test; 创建并切换到这个库,如果库是空的,当前是不显示的

db: 显示当前所在的库

db.users.insert({"name":"yawu.ding"}): db表示当前库

db.dropDatabase(): 删除当前的库

5.2 集合的crud

db.createCollection(“t_user”) 显式创建集合

show collections 显示当前库中的所有集合

db.集合名称.drop() 删除集合

会为每条插入集合的文档记录维护一个_Id

db.集合名称.insert({name:'xiaohei',age:23,sex:true}) 向集合中插入数据, 由于bson格式,key可以不加”“

db.yawu_test.insertMany([{name:"yawu", age:23}, {"name":"henghui",age:34, "_id":23}]) 向集合中插入多条数据

for(i=0;i<5000;i++){db.yawu_test.insertMany([{name:"yawu", age:23}, {"name":"henghui",age:34}])} 批量的操作

db.yawu_test.find({_id: ObjectId("6500f51ef3213eb9acda6da1")})

db.yawu_test.remove({_id: ObjectId("6500f51ef3213eb9acda6da1")})

db.yawu_test.remove({}): 删除所有

db.yawu_test.update({name:"yawu"},{roy:"ding"}); 只会更新一条

db.yawu_test.update({name:"yawu"},{$set:{roy:"ding", tom: "self"}});

db.yawu_test.update({name:"yawu"},{$set:{roy:"ding", tom: "self"}},{multi: true});

db.yawu_test.find({name:"yawu1"}).pretty();

db.yawu_test.find({age:{$lt:23}}).pretty();

db.yawu_test.find({age:{$lt:23}, "name":"yawu1"}).pretty(); 多个条件一起查询

db.yawu_test.find({or:[{age:{lt:23}}, {name:"yawu1"}]}).pretty(); 多个条件or查询

{ "_id" : ObjectId("6500f51ef3213eb9acda6dd1"), "name" : "yawu", "age" : 21, "roy" : "ding", "tom" : "self", "likes" : [ "basketball", "football", "pingpong" ] } db.yawu_test.find({likes:"basketball"}); 对于数组的查询

db.yawu_test.find({likes:{$size:3}}); 可以根据数组的长度查询

5.3 集合索引的crud

1、查看集合索引

db.集合名称.getIndexes()

db.yawu_test.getIndexes()

db.yawu_test.createIndex({age:1},{name:"index_age"})

db.yawu_test.createIndex({name:1})

2、查看集合索引大小

db.集合名称.totalIndexSize()

3、删除集合所有索引

db.集合名称.dropIndexes()

db.yawu_test.dropIndexes()

4、删除集合指定索引

db.集合名称.dropIndex("索引名称")

5、 复合索引

说明: 一个索引的值是由多个 key 进行维护的索引的称之为复合索引

db.集合名称.createIndex({"title":1,"description":-1})

6.使用过程中遇到的bug

6.1 springboot连接的时候出现这个com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1,

添加配置:spring.data.mongodb.authentication-database=admin