一、概述
内存的特点:一旦重启,或者断电,数据全部不没了,故需要将数据存在磁盘上
RDAMS(关系型数据库):全都是表,关系型数据库是由表组成的,所有的关系型数据库都是使用SQL操作的
NoSQL(非关系型数据库):键值对数据库,文档数据库(MongoDB)
MongoDB是为了快速开发互联网web应用而开发的一款数据库,省了建表、改表的时间,而MongoDB是文档数据库,所以速度很快,想改就改,想删就删
MongoDB的数据模型是面向文档的,所谓文档是一种类似JSON的数据格式,简单理解为,MongoDB当中存储的是各种各样的JSON(BJSON),当然也可以存储一些二进制数据,但是我们把它当成是JSON格式的
指定数据库位置:
mongod --dbpath 数据库路径 --port 端口号
二、Docker-componse方式安装
mongo:
image: mongo:4.4.6
container_name: tienChin-mongo
restart: always
privileged: true
ports:
- 27017:27017
volumes:
- /home/techen/tienChin/mongodb/data:/data/db
- /home/techen/tienChin/mongodb/logs:/var/log/mongodb
- /home/techen/tienChin/mongodb/mongod.conf:/etc/mongod.conf
environment:
TZ: Asia/Shanghai
MONGO_INITDB_ROOT_USERNAME: root # 自动开启权限认证
MONGO_INITDB_ROOT_PASSWORD: QAZqaz01
# 路径是容器的路径,不能指定宿主机的路径
command: "mongod --config /etc/mongod.conf"
networks:
tienChin:
aliases:
- tienChin-mongo
mongo-express:
image: mongo-express:latest
container_name: tienChin-mongo-express
restart: always
links:
- mongo:mongodb
depends_on:
- mongo
ports:
- 27018:8081
environment:
# 编辑主题
ME_CONFIG_OPTIONS_EDITORTHEME: tienChin-mongo-express
# mongo的服务地址,可以配置容器名也可以用ip
ME_CONFIG_MONGODB_SERVER: mongo
# mongo服务的端口
ME_CONFIG_MONGODB_PORT: 27017
# mongo的admin用户名
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: QAZqaz01
# 登陆页面时候的用户名
ME_CONFIG_BASICAUTH_USERNAME: admin
ME_CONFIG_BASICAUTH_PASSWORD: 666666
networks:
tienChin:
aliases:
- tienChi-mongo-express
三、基本概念
3.1数据库操作
一个数据库当中有多个集合,类似于数据,数据当中可以存储文档,文档是数据库当中的最小单位,我们操作的都是文档

注意:在MongoDB当中,集合与数据库都不需要手动创建,如果我们在创建文档时,如果文档所在的集合或者数据库不存在,会自动创建,只是,如果没有数据,不会显示,只有在第一次添加数据时会创建,显示
show dbs //显示系统当中的数据库
show databases
db //查看当前数据库
use 数据库名 //数据库切换
show collections //显示当前数据库当中的集合
3.2 库操作
使用用户名和密码连接到 MongoDB 服务器,你必须使用 'username:password@hostname/dbname' 格式,'username'为用户名,'password' 为密码。
mongodb://fred:foobar@localhost //使用用户名fred,密码foobar登录localhost的admin数据库。
mongodb://fred:foobar@localhost/baz //使用用户名fred,密码foobar登录localhost的baz数据库。
mongodb://localhost,localhost:27018,localhost:27019 //连接 replica set 三台服务器 (端口 27017, 27018, 和27019):
MongoDB创建数据库
语法:
use DATABASE_NAME //如果数据库不存在,则创建数据库,否则切换到指定数据库。
实例:
3.3CRUD
1、insert
db.collection.insert() //首先切换到需要的数据库,然后插入文档到集合当中
db.stu.insert({name:"古踏仙",age:36,gender:"男"})
db.stu.find() //查询db当中stu集合当中的所有文档
注意:如果我们给集合当中插入文档时,如果没有指定"_id",那么会自动创建一个"_id",作为该文档的唯一属性
可以通过ObjectId()来生成,不会重复,因为是使用时间戳生成的
db.collection.insertOne() //插入一个 ,插入单个
db.collection.insertMany() //插入多个 ,插入数据
2、find
db.stu.find() /db.stu.find({}) //查询集合当中所有符合条件的文档,如果没有传入条件,代表查询所有的文档,返回的是数组
db.stu.findOne() //查询集合当中符合条件的第一个文档,返回的是对象
db.stu.find().count() //查询集合当中符合条件的文档个数
3、update
db.student.update({query},{set,unset})
db.student.update({"_id":ObjectId("5ff3d22976f98c54752c019e")},
{$unset:{
address:"龙符大陆"
}
}
);
update()默认情况下只修改第一个满足条件的判断,但是可以让改多个,加个参数就行,{multil:ture}
updateMany():修改多个
updateOne():修改一个
参数addToSet(); //向数组当中添加一个元素
push() //向数组当插入一个元素
4、delete
db.student.remove({id:"sfdjhq2e124234b43534q24"}) //默认删除多个
db.student.remove({}) //清空集合
db.student.drop() //删除集合
// 增加-向集合当中插入一个或者多个文档
db.student.insert({name:"王腾",age:24,gender:"男"});
//插入--插入多个
db.student.insert([
{name:"鲁智深",age:43,gender:"男"},
{name:"阎婆惜",age:28,gender:"女"},
{name:"潘金莲",age:26,gender:"女"}]);
db.student.find();
ObjectId();
db.student.find({age:5ff3d54ba62600002e003d72});
db.student.find({'name'});
//update(查询条件,修改新信息),update默认情况下只修改第一个满足条件的
db.student.update({"_id":ObjectId("5ff3d22976f98c54752c019e")},
{$unset:{
address:"龙符大陆"
}
}
);
//如果要对文档内的属性进行访问,要在双引号内部进行访问
//向number当中插入2000条数据
for(var i=0;i<2000;i++){
db.number.insert({num:i});
}
db.number.find();
db.number.remove({});
var arr=[];
for(var i=0;i<2000;i++){
arr.push({num:i});
}
db.number.insert(arr)
db.number.find({});
//查找大于500的
db.number.find({num:{$gt:500}})
//查找40到5o的
db.number.find({num:{$gt:40,$lt:50}});
db.number.find().limit(10);
//skip用于跳过指定的条数,limit用于指定显示的条数,MongoDB会自动调整skip、limit的位置
db.number.find().skip(10).limit(10);
//文档之间的关系
//sort()用来指定排序的顺序,正数标识升序表,负数表示降序表
db.number.find({}).sort(sal:1);
//查询时,可以在第二个参数的位置指定查询结果的投影
db.number.find({},{ename:1,_id:0,age:1}).
四、备份会还原
数据导入:
mongorestore -h 127.0.0.1:27017 -d leanote --dir /mongodb_backup/leanote_install_data/
– --h :服务器ip -----d :服务器上数据库
– --dir导入文件所在目录数据导出:
mongodump -h 192.168.17.129:27017 -d leanote -o /home/mongodump/
– —o:导出到本地的某个位置
-------: 将192.168.17.129服务器上的,leanote库,导出到/home/mongodump/目录下