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日志文件存放位置
客户端连接命令:./mongo --port=27017
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. 相关概念
| RDBMS | MongDB |
|---|---|
| 数据库 | 数据库 |
| 表 | 集合 |
| 行 | 文档 |
| 列 | 字段 |
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