1.5第三阶段2 MongoDB 数据库
Posted 编程界小学生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.5第三阶段2 MongoDB 数据库相关的知识,希望对你有一定的参考价值。
MongoDB数据库
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB的数据层次: 文档 -> 集合 -> 数据库
文档: 类似于表中的一条记录,格式 : “属性名”:“属性值”, …
集合: 由多个文档组成的,类似于表
数据库: 由多个集合组成中,类似于mysql的数据库。
一、安装mongo服务
下载地址:https://www.mongodb.com/try/download/community?tck=docs_server
环境变量设置:
将 MongoDB安装的bin完整路径添加到环境变量的用户变量中的Path中。
Win+R 输入 cmd打开新的命令窗口,输入mongo, 进入到mongo交互环境中。
二、CURD操作
官方文档:https://www.mongodb.com/docs/mongodb-shell/run-commands/
【扩展】docker部署安装mongo
su root
docker version
docker pull mongo
docker run -itd --name mg1 -p 27017:27017 mongo
docker exec -it mg1 mongo
1 数据库操作
help 查询命令说明
show dbs 查看所有的数据库
use <数据库名> 打开或创建数据库, 如打开或创建stu数据库: use stu
db.dropDatabase() 删除当前的数据库
2 集合操作
db.help() 查看当前数据库下相关的操作函数命令
show collections 查看当前库下的所有集合
db.createCollection(name) 创建集合
如1: 创建student集合
use stu
db.createCollection('student')
db.集合名.help() 查看当前集合下的函数命令
db.集合名.drop() 删除`集合名`的集合
如2: 删除student集合
db.student.drop()
3 插入文档
文档是属于某一个集合中的一条数据, 文档操作属于集合下的命令,所以操作文档的函数以
db.集合名.
开头的。
json数据: javascript object 简化的数据对象,只有属性和属性值。
json数据分两种结构类型: json对象 , json数组 [ ]
json对象:
"name": "张三", "sex": "男", "age": 20
json数组:
[
,
,
"lovies": ["打球", "看书"]
]
db.createCollection('student')
db.student.insert(obj) 插入文档数据,文档数据以json对象格式呈现的
db.student.insertMany([objs])
db.student.save(obj) 保存或更新数据
如1: 向student集合插入一条数据
db.student.insert(_id: 1, name: "disen", age: 20)
如2: 向student集合中批量插入三条数据
db.student.insertMany([_id: 2, name: "刘平", age:21, _id:3, name:"刘丹",age:19, name: "王海", age: 19])
【注意】文档中主键的属性默认为_id
,如果没有提供此属性值则会自动生成一个。
> db.student.find()
"_id" : 1, "name" : "disen", "age" : 20
"_id" : 2, "name" : "刘平", "age" : 21
"_id" : 3, "name" : "刘丹", "age" : 19
"_id" : ObjectId("6242cc9a41ff9536491c5469"), "name" : "王海", "age" : 19
如3: 更新_id
为1的name为disen666
db.student.save(_id:1, name:"disen666")
【注意】save()将_id存在的数据使用新的数据进行替换。
4 查询文档
db.集合名.find([查询条件], [查看属性]).pretty()
pretty()方法以格式化的方式来显示文档
4.1:查看所有学生的姓名
db.student.find(, name:1)
"_id" : 1, "name" : "disen666"
"_id" : 2, "name" : "刘平"
"_id" : 3, "name" : "刘丹"
"_id" : ObjectId("6242cc9a41ff9536491c5469"), "name" : "王海"
4.2:查询年龄大于等于20的所有学生
db.student.find(age:$gte: 20)
【说明】$开头的标识符表示某一个条件名称变量
$or 多个条件之间的 或 的关系
$gt 大于
$lt 小于
$gte 大于等于
$lte 小于等于
$ne 不等于
$in 范围找到,每个属性值之间的关系是or
$regex 使用正则表达式查找, 正则表达式是一种语言,主要用于内容匹配。
\\w 表示字母和数字
\\d 表示数字
. 任意字符
* 0或多个
+ 1或多个
? 0或1个
n 长度n个
n, 长度至少n个
n, m 长度在n和m之间
^ 内容的开始
$ 内容的结束
4.3: 查看年龄在19到20之间的所有学生
db.student.find(age: $gte:19, $lte: 20)
统计个数:
db.student.find(age: $gte:19, $lte: 20).count()
4.4: 查看姓名中包含n字母的所有学生
db.student.find(name: $regex: "n")
4.5: 查看刘
姓的所有学生
db.student.insert(_id:6, name: "小刘", age: 18)
db.student.find(name: $regex: "^刘")
db.student.find(name: $regex: "丹$")
4.6:Limit()
方法
limit()方法基本语法如下所示:
>db.COLLECTION_NAME.find().limit(NUMBER)
--查看前几条数据
显示查询文档中的两条记录:
> db.col.find(,"title":1,_id:0).limit(2)
"title" : "php 教程"
"title" : "Java 教程"
>
注:如果你们没有指定limit()方法中的参数则显示集合中的所有数据。
4.7:Skip()
方法
使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
skip() 方法脚本语法格式如下:
>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
实例
以下实例只会显示第二条文档数据
>db.col.find(,"title":1,_id:0).limit(1).skip(1)
"title" : "Java 教程"
>
**注:**skip()方法默认参数为 0 。
4.8:sort()
方法
sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
sort()方法基本语法如下所示:
>db.COLLECTION_NAME.find().sort(KEY:1)
以下实例演示了 col 集合中的数据按字段 likes 的降序排列:
>db.col.find(,"title":1,_id:0).sort("likes":-1)
"title" : "PHP 教程"
"title" : "Java 教程"
"title" : "MongoDB 教程"
>
4.9:索引
4.9.1:createIndex()
方法来创建索引。
createIndex()方法基本语法格式如下所示:
>db.collection.createIndex(keys, options)
语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。
createIndex() 方法中你也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)。
>db.col.createIndex("title":1,"description":-1)
>
4.9.2:查看所有索引
db.persons.getIndexes()
4.9.3:删除索引
db.集合名.dropIndex(索引名)
4.10:聚合aggregate()
aggregate() 方法的基本语法格式如下所示:
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
实例
> db.mycol.aggregate([$group : _id : "$by_user", num_tutorial : $sum : 1])
"result" : [
"_id" : "qf.com",
"num_tutorial" : 2
,
"_id" : "Neo4j",
"num_tutorial" : 1
],
"ok" : 1
>
以上实例类似sql语句:
select by_user, count(*) from mycol group by by_user
5 更新文档
db.集合名.update(条件, $set: 属性:值,..., is_upsert, multi)
如1:更新刘
姓的学生性别为女
db.student.update(name: $regex: "^刘", $set: sex: "女", false, true)
【说明】is_upsert为false时,表示如果更新的数据不存在时,不做处理,反之插入数据;multi为true表示更改所有匹配的文档(数据)
如2: 更新所有学生的性别 为男
db.student.update(, $set: sex: "男",false, true)
6 删除文档
db.集合名.remove(条件)
如:删除_id为1
的文档数据
db.student.remove(_id:1)
db.student.remove(_id: ObjectId("6242cc9a41ff9536491c5469"))
MongoDB数据库系列MongoDB基础
第一章、MongoDB基础
学习目标
- 数据库种类
- MongoDB简介
- MongoDB安装
- MongoDB基本操作
- MongoDB文档增删修查(CURD)
- MongoDB实战教学管理系统数据库设计
数据库种类
- 关系型:Oracle、MySQL、SQLite 、SQL Server等
- 非关系型(Not Only SQL):MongoDB(文档)、Redis/Memcache(内存)
关系型和非关系型数据库软件区别
- 相同点:都是数据库软件,用来存放项目数据
- 不同点:
关系型:1.遵循SQL标准,换句话说语法大同小异、2.有库和表约束等
非关系型:1.没有统一标准、2.一般键值对形式存储、3.读取速度更快
关系型和非关系型数据库如何选择:
1、MongoDB简介
- MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
- MongoDB是一个介于关系型和非关系型数据库之间的产品,是非关系型数据库当中功能最为丰富,也是最像关系型数据库的。
- 支持的数据结构非常松散,是类似json的bson格式
JSON(Javascript Object Notation JS对象简谱)是一种轻量级的数据交换格式bson(二进制JSON)
下载版本地址
- windows版本下载:https://www.mongodb.org/dl/win32
- linux版本下载:https://www.mongodb.org/dl/linux
- 社区免费版(自选版本):https://www.mongodb.com/try/download/community
- 版本说明:
2.x
3.x (3.2 、3.4、3.6 )
4.x (4.2 更佳的数据管理能力、更强的分布式架构、多文档事物等)
2、Windows下安装MongoDB
2.1、步骤
-
步骤1:下载地址:https://www.mongodb.com/try/download/community
-
步骤2:解压
解压后先在解压目录中创建如下文件夹,用于创建MongoDB服务
-
步骤3:创建MongoDB服务
注意:
1:必须要通过管理员身份运行DOS窗口,切换到bin目录下,否则无权限会创建失败
2:得提前创建数据和日志存放目录 (上述我们已创建)
-
执行如下命令:
#此处的磁盘路径就是我们上述的data文件夹路径 #此处的日志路径就是我们上述的log文件夹路径 mongod.exe --install --dbpath 磁盘路径 --logpath 日志路径
执行上述命令直接回车即可:
去服务中查看MongoDB服务是否创建成功?
-
步骤4:启动服务
net start mongodb
-
步骤5:登录(验证是否安装成功)
#连接MongoDB数据库 mongo
-
关闭服务命令:
net stop mongodb
2.2、Linux系统下安装MongoDB
- 步骤1:下载curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz
- 步骤2:解压
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz- 步骤3:将解压包拷贝到指定目录
mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb- 步骤4:创建数据存放目录与日志存放目录
mkdir -p /usr/local/mongodb/data /usr/local/mongodb/logs- 步骤5:启动MongoDB服务
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/mongodb.log --logappend --port=27017 --fork- 后期登录即可
/usr/local/mongodb/bin/mongo
3、启动成功后,为数据库设置登录密码(数据安全)
3.1、查看所有数据库
#查看所有数据库
show databases
show dbs #缩写指令
3.2、选择admin数据库,并为其设置用户和密码
3.2.1、给admin数据库设置用户和密码及权限角色
db.createUser({user: 'root', pwd: '123456', roles: ['root']})
3.2.2、验证是否设置成功
#这里用db.auth('root', '123456')
#如果返回 '1'表示验证成功, 如果是 '0' 表示验证失败.
db.auth('用户名','用户密码')
4、基本指令操作
- 查看数据库
show databases #完整形式 show dbs #缩写形式
- 选择数据库
use admin
- 查看集合
show collections
- 创建集合
db.createCollection('集合名')
- 删除集合
db.集合名.drop()
- 删除数据库
#第一步 use 数据库名 #第二步 db.dropDatabase()
5、MongoDB文档增删改查(CURD)
5.1、增加数据(Create)
-
向集合中插入数据
db.集合名.insert({key1:'value1',key2:'value2',……})
-
查看集合中的数据
db.集合名.find()
留心1:数据库和集合不存在的时候都会隐式创建
留心2:对象的键统一不加引号方便看,但是查看集合数据时系统会自动加
留心3:mongodb会给每条数据增加一个全球唯一的_id键,当然也可以自己赋值把系统自定义的覆盖掉(非常不建议这样做)
-
一次性向集合中插入多条记录
#注意此处的中括号 db.集合名.insert([ {uname:'lisi',pwd:'654321',age:22}, {uname:'wangwu',pwd:'123321',age:23}, {uname:'zhaoliu',pwd:'112233',age:24} ])
-
如何向集合中快速插入十条数据
for(var i=0;i<=10;i++){ db.集合名.insert(uname:'a'+i,pwd:'pwd'+i,age:i) }
5.2、查找数据(Read)
- 按条件查询所有数据
db.集合名.find({},{条件}) #前面的{}也可以不写
- 语法:
db.集合名.find({ 键:{运算符:值} })
条件:查询所有数据 {}或者不写
- 查询age=6的数据 ----{age:6}
- 既要age=6又要性别=男 ----{age:6,sex:‘男’}
- 查询的列:参数不写 ----是查询全部列
- 字段 {age:1} 只显示age列(
- 字段 {age:0} 除了age列其他字段都显示
- 留心:不管你怎么写系统自定义的_id都会在
- 运算符:
$gt 大于 $gte 大于等于 $lt 小于 $lte 小于等于 $ne 不等于 $in 在其中 $nin 不在其中
- 查询年龄大于5的记录
- 查询年龄为5,岁、8岁、10岁的记录
5.3、修改数据(Update)
- 将{uname:‘zs1’}修改为{uname:‘zs11’}
db.集合名.update({uname:'zs1'},{{uname:'zs11'})
- 使用升级语法修改器(将zs4的姓名改为zs44)
db.c3.update({uname:"zs4"}, {$set: {uname: "zs44"}})
- 修改器语法:
$set #修改列值 $unset #删除列值 $inc #递增 $rename #修改列名(重命名)
- 给{uname:“zs10”}的年龄加2岁或者减2岁(利用$inc)
- 综合利用修改器
5.4、删除数据(Delete)
- 语法:
db.集合名.remove({},true/false) #后面的条件不写默认是false
注意:是否删除一条记录
- true-是
- false-否(默认)
- MongoDB增删改查CURD标识总结:
- 增Create
db.集合名.insert()
- 删Delete
db.集合名.remove()
- 改Update
db.集合名.update()
- 查Read
db.集合名.find()
以上是关于1.5第三阶段2 MongoDB 数据库的主要内容,如果未能解决你的问题,请参考以下文章