MongoDB数据库入门到精通看这一篇就够了
Posted 袁袁袁袁满
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB数据库入门到精通看这一篇就够了相关的知识,希望对你有一定的参考价值。
文章目录
一、MongoDB简介
1、MongoDB介绍
MongoDB是为快速开发互联网Web应用而设计的数据库系统。
MongoDB的设许目标是极简、灵活、作为Web应用栈的一部分。
MongoDB的数据模型是面向文档的, 所谓文档是一种类似于JSON的结构,简单理解MongoDB这个数据库中存的是各种各样的JSON。( BSON )
2、MongoDB中三个概念
数据库( database ):数据库是一个仓库,在仓库中可以存放集合。
集合( collection ):集合类似于数组,在集合中可以存放文档。
文档( document ):文档数据库中的最小单位,我们存储和操作的内容都是文档。
3、MongoDB优势
易扩展: NoSQL数据库种类繁多, 但是⼀个共同的特点都是去掉关系数据库的关系型特性。 数据之间⽆关系, 这样就⾮常容易扩展
⼤数据量, ⾼性能: NoSQL数据库都具有⾮常⾼的读写性能, 尤其在⼤数据量下, 同样表现优秀。 这得益于它的⽆关系性, 数据库的结构简单
灵活的数据模型: NoSQL⽆需事先为要存储的数据建⽴字段, 随时可以存储⾃定义的数据格式。 ⽽在关系数据库⾥, 增删字段是⼀件⾮常麻烦的事情。 如果是⾮常⼤数据量的表, 增加字段简直就是⼀个噩梦
二、环境搭建
1、下载
官网下载地址:https://www.mongodb.com/try/download
注意:在MongoDB版本的版本偶数版为稳定版通常用于生产环境,如3.2.x、3.4.x、3.6.x,奇数版本为开发版本:3.1.x、3.3.x、3.5.x表示开发版
2、安装
点击开始安装
3、安装失败问题解决
在安装MongoDB数据库的时候,有可能出现安装速度较慢,然后取消安装以后,再一次重新去安装的时候,在安装的最后一步可能会出现无法启动服务的现象
这种情况直接点击Ignore,完成安装以后
以管理员身份运行命令行窗口,使用该命令将MongDB服务删除掉
sc delete MongoDB
删除以后我们自己在data
目录下创建一个db文件夹
;log目录
下创建一个MongoDB.log
文件,如下:
重新装一个MongoDB服务就可以了,在安装目录的bin中打开控制台窗口输入命令:
mongod --dbpath=F:\\mongodb\\data\\db --logpath=F:\\mongodb\\log\\MongoDB.log --install --serviceName "MongoDB"
注意:第一个路径表示的是数据存放地址;第二个路径表示日志存放文件
如图所示:
再输入 net start MongoDB
启动服务
执行结果如下图:
设置环境变量
设置完毕后,需要重启一下电脑
在cmd控制输入,mongod -version
,出现版本号表示安装成功
4、启动
cmd控制输出: mongo
回车,出现大于符号表示进入MongoDB数据库了
5、图形化工具
1)下载
官网下载地址(英文版,试用14天):https://www.mongodbmanager.com/download ( 傻瓜式安装,一路next到完成即可)
2)连接客户端
1、确保mongodb已经启动
2、如果没有特别设置账户权限,默认情况下无需修改新建连接信息
3)基本操作
1、点击+
展开数据库集合
2、输入sql语句
3、操作集合
4、集合其他操作
选择集合并右击
三、基础入门
1、基础命令
- 查看所有的数据库:
show dbs /show databases
- 切换数据库:
use db_name
- 查看使用当前的数据库:
db
- 删除当前的数据库:
db.dropDatabase()
- 查看数据库中所有集合(表):
show collections
- 查看指定集合下所有文档(JSON数据):
db.集合名称.find()
2、集合命令
不手动创建集合:向不存在的集合中第⼀次加⼊数据时, 集合会被创建出来
手动创建结合:
-
db.createCollection(name,options)
-
db.createCollection("stu")
-
db.createCollection("sub", capped : true, size : 10 )
-
参数capped: 默认值为false表示不设置上限,值为true表示设置上限
-
参数size: 当capped值为true时, 需要指定此参数, 表示上限⼤⼩,当⽂档达到上限时, 会将之前的数据覆盖, 单位为字节
查看集合:show collections
删除集合:db.集合名称.drop()
3、数据类型
数据类型 | 介绍 |
---|---|
Object ID | ⽂档ID |
String | 字符串, 最常⽤, 必须是有效的UTF-8 |
Boolean | 存储⼀个布尔值, true或false |
Integer | 整数可以是32位或64位, 这取决于服务器 |
Double | 存储浮点值 |
Arrays | 数组或列表, 多个值存储到⼀个键 |
Object | ⽤于嵌⼊式的⽂档, 即⼀个值为⼀个⽂档 |
Null | 存储Null值 |
Timestamp | 时间戳, 表示从1970-1-1到现在的总秒数 |
Date | 存储当前⽇期或时间的UNIX时间格式 |
4、注意点
创建⽇期语句如下 :参数的格式为YYYY-MM-DD
new Date('2017-12-20')
每个⽂档都有⼀个属性, 为_id
, 保证每个⽂档的唯⼀性
可以⾃⼰去设置_id插⼊⽂档,如果没有提供, 那么MongoDB为每个⽂档提供了⼀个独特的_id, 类型为objectID
objectID是⼀个12字节的⼗六进制数:
- 前4个字节为当前时间戳
- 接下来3个字节的机器ID
- 接下来的2个字节中MongoDB的服务进程id
- 最后3个字节是简单的增量值
5、插入数据
语法如下:
-
db.集合名称.insert(JSON对象)
-
插入1条数据:
db.集合名称.insertOne(JSON对象)
-
插入多条数据:
db.集合名称.insertMany([JSON 1,JSON 2,JSON 3,...JSON n])
-
指定
_id
参数:db.集合名称.insert(_id:"001", name:"gj", gender:1)
注意:
- 插入数据时不需要专门去创建集合(表),因为插入数据时会自动创建集合
- 插⼊⽂档时, 如果不指定_id参数, MongoDB会为⽂档分配⼀个唯⼀的ObjectId
- 如果⽂档的_id已经存在则报错
案例:
// 插入1条数据
db.test001.insert(name: "张三", age: 18, sex: "男", hobby: "美女");
db.test001.insertOne(name: "张三", age: 18, sex: "男", hobby: "美女");
// 插入多条数据
db.test001.insertMany([
name: "张三", age: 18, sex: "男", hobby: "美女",
name: "李四", age: 20, sex: "男", hobby: "跑车",
name: "王五", age: 21, sex: "男", hobby: "黑丝",
]);
6、简单查询
查看当前集合所有数据(json文件)
格式:db.集合名称.find()
案例:
> db.test001.find()
"_id" : ObjectId("62177e62cec136e6f853bbe9"), "name" : "张三", "age" : 18, "sex" : "男", "hobby" : "美女"
"_id" : ObjectId("62177e62cec136e6f853bbea"), "name" : "李四", "age" : 20, "sex" : "男", "hobby" : "跑车"
"_id" : ObjectId("62177e62cec136e6f853bbeb"), "name" : "王五", "age" : 21, "sex" : "男", "hobby" : "黑丝"
7、保存数据
格式:db.集合名称.save(document)
注意:如果⽂档的_id已经存在则修改, 如果⽂档的_id不存在则添加
案例:
8、修改数据
语法格式:
-
db.集合名称.update(<query> ,<update>,multi: <boolean>)
-
更新一条(字段全部替换):
db.集合名称.update(name:'原始数据',name:'修改后数据')
-
更新一条(仅更新一个字段):
db.集合名称.update(name:'原始数据',$set:name:'修改后数据')
,推荐使用 -
更新全部:
db.集合名称.update(name:'原始数据',$set:name:'修改后数据',multi:true)
-
参数query:查询条件
-
参数update:更新操作符
-
参数multi:可选, 默认是false,表示只更新找到的第⼀条记录, 值为true表示把满⾜条件的⽂档全部更新
注意:multi:true
需要和$set
配合使用
案例1:
//把名字为小黑的更新为小白
> db.test001.update(name: '小黑',name:'小白')))
WriteResult( "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 )
> db.test001.find()
"_id" : ObjectId("621780b5cec136e6f853bbef"), "name" : "张三", "age" : 18, "sex" : "男", "hobby" : "美女"
"_id" : ObjectId("621780b5cec136e6f853bbf0"), "name" : "李四", "age" : 20, "sex" : "男", "hobby" : "跑车"
"_id" : ObjectId("621780b5cec136e6f853bbf1"), "name" : "王五", "age" : 21, "sex" : "男", "hobby" : "黑丝"
"_id" : 1, "name" : "小白"
- 注意:这种写法会替换掉其他的字段(全部替换),age、sex、hobby都没有了
案例2:
//把名字为王五的更新为小王
> db.test001.update(name:'王五',$set:name:'小王')
WriteResult( "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 )
> db.test001.find() ')
"_id" : ObjectId("621780b5cec136e6f853bbef"), "name" : "张三", "age" : 18, "sex" : "男", "hobby" : "美女"
"_id" : ObjectId("621780b5cec136e6f853bbf0"), "name" : "李四", "age" : 20, "sex" : "男", "hobby" : "跑车"
"_id" : ObjectId("621780b5cec136e6f853bbf1"), "name" : "小王", "age" : 21, "sex" : "男", "hobby" : "黑丝"
"_id" : 1, "name" : "小白"
- 可以看出加上
$set:
后仅更新了name一个字段
案例3:
//修改所有人的性别
> db.test001.update(sex: '男',$set:sex: '女',multi:true)
WriteResult( "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 )
> db.test001.find() ) )) )
"_id" : ObjectId("621780b5cec136e6f853bbef"), "name" : "张三", "age" : 18, "sex" : "女", "hobby" : "美女"
"_id" : ObjectId("621780b5cec136e6f853bbf0"), "name" : "李四", "age" : 20, "sex" : "女", "hobby" : "跑车"
"_id" : ObjectId("621780b5cec136e6f853bbf1"), "name" : "小王", "age" : 21, "sex" : "女", "hobby" : "黑丝"
"_id" : 1, "name" : "小白"
multi:true
:起到全部JSON替换的功能
9、删除数据
格式:db.集合名称.remove(<query>,justOne: <boolean>)
- 参数query:可选,删除的⽂档的条件
- 参数justOne:可选, 如果设为true或1, 则只删除⼀条, 默认false, 表示删除多条
案例:
//先删除一条数据
> db.test001.remove(sex: '女', justOne:true)
WriteResult( "nRemoved" : 1 )
> db.test001.find()
"_id" : ObjectId("621780b5cec136e6f853bbf0"), "name" : "李四", "age" : 20, "sex" : "女", "hobby" : "跑车"
"_id" : ObjectId("621780b5cec136e6f853bbf1"), "name" : "小王", "age" : 21, "sex" : "女", "hobby" : "黑丝"
"_id" : 1, "name" : "小白"
// 全部删除
> db.test001.remove(sex: '女')
WriteResult( "nRemoved" : 2 )
> db.test001.find() )
"_id" : 1, "name" : "小白"
四、高级查询
数据准备(三国争霸):
db.test002.insertMany([
name: "张飞", hometown: "蜀国", age: 30, sex: "男",
name: "关羽", hometown: "蜀国", age: 40, sex: "男",
name: "刘备", hometown: "蜀国", age: 50, sex: "男",
name: "曹操", hometown: "魏国", age: 45, sex: "男",
name: "司马懿", hometown: "魏国", age: 45, sex: "男",
name: "孙权", hometown: "吴国", age: 50, sex: "男"
]);
1、数据查询
-
条件查询:
db.集合名称.find(条件⽂档)
-
查询只返回第⼀个:
db.集合名称.findOne(条件⽂档)
-
将结果格式化:
db.集合名称.find(条件⽂档).pretty()
案例1:
// 查询年龄为50
> db.test002.find(age:50)
"_id" : ObjectId("6219a246d1ca96a61ceca3e7"), "name" : "刘备", "hometown" : "蜀国", "age" : 50, "sex" : "男"
"_id" : ObjectId("6219a246d1ca96a61ceca3ea"), "name" : "孙权", "hometown" : "吴国", "age" : 50, "sex" : "男"
// 查询年龄为45
> db.test002.find(age:45)
"_id" : ObjectId("6219a246d1ca96a61ceca3e8"), "name" : "曹操", "hometown" : "魏国", "age" : 45, "sex" : "男"
"_id" : ObjectId("6219a246d1ca96a61ceca3e9"), "name" : "司马懿", "hometown" : "魏国", "age" : 45, "sex" : "男"
案例2:
//查询一个年龄为50
> db.test002.findOne(age:50)
"_id" : ObjectId("6219a246d1ca96a61ceca3e7"),
"name" : "刘备",
"hometown" : "蜀国",
"age" : 50,
"sex" : "男"
//查询一个年龄为45
> db.test002.findOne(age:45)
"_id" : ObjectId("6219a246d1ca96a61ceca3e8"),
"name" : "曹操",
"hometown" : "魏国",
"age" : 45,
"sex" : "男"
案例3:
//美化输出年龄为50
> db.test002.find(age:50).pretty()
"_id" : ObjectId("6219a246d1ca96a61ceca3e7"),
"name" : "刘备",
"hometown" : "蜀国",
"age" : 50,
"sex" : "男"
"_id" : ObjectId("6219a246d1ca96a61ceca3ea"),
"name" : "孙权",
"hometown" : "吴国",
"age" : 50,
"sex" : "男"
2、比较运算符
等于: 默认是等于判断, 没有运算符
⼩于:$lt
(less than)
⼩于等于:$lte
(less than equal)
⼤于:$gt
(greater than)
⼤于等于:$gte
不等于:$ne
格式:db.集合名称.find(age:$gte:18)
案例:
//年龄小于45
> db.test002.find(age:$lt:45)
"_id" : ObjectId("6219a246d1ca96a61ceca3e5"), "name" : "张飞", "hometown" : "蜀国", "age" : 30, "sex" : "男"
"_id" : ObjectId("6219a246d1ca96a61ceca3e6"), "name" : "关羽", "hometown" : "蜀国", "age" : 40, "sex" : "男"
//年龄小于等于45
> db.test002.find(age:$lte:45)
"_id" : ObjectId("6219a246d1ca96a61ceca3e5"), "name" : "张飞", "hometown" : "蜀国", "age" : 30, "sex" : "男"
"_id" : ObjectId("6219a246d1ca96a61ceca3e6"), "name" : "关羽", "hometown" : "蜀国", "age" : 40, "sex" : "男"
"_id" : ObjectId("6219a246d1ca96a61ceca3e8"), "name" : "曹操", "hometown" : "魏国", "age" : 45, "sex" : "男"
"_id" : ObjectId("6219a246d1ca96a61ceca3e9"), "name" : "司马懿", "hometown" : "魏国", "age" : 45, "sex" : "男"
//年龄大于45
> db.test002.find(age:$gt:45)
"_id" : ObjectId("6219a246d1ca96a61ceca3e7"), "name" : "刘备", "hometown" : "蜀国", "age" : 50, "sex" : "男"
"_id" : ObjectId("6219a246d1ca96a61ceca3ea"), "name" : "孙权", "hometown" : "吴国", "age" : 50, "sex" : "男"
//年龄大于等于45
> db.test002.find(age:$gte:45)
"_id" : ObjectId("6219a246d1ca96a61ceca3e7"), "name" : "刘备", "hometown" : "蜀国", "age" : 50, "sex" : "男"
"_id" : ObjectId("6219a246d1ca96a61ceca3e8"), "name" : "曹操", "hometown" : "魏国", "age" : 45, "sex" : "男"
"_id" : ObjectId("6219a246d1ca96a61ceca3e9"), "name" : "司马懿", "hometown" : "魏国", "age" : 45, "sex" : "男"
"_id" : ObjectId("6219a246d1ca96a61ceca3ea"), "name" : "孙权", "hometown" : "吴国", "age" : 50, "sex" : "男"
//年龄不等于45
> db.test002.find(age:$ne:45)
"_id" : ObjectId("6219a246d1ca96a61ceca3e5"), "name" : "张飞", "hometown" : "蜀国", "age" : 30, "sex" : "男"
"_id" : ObjectId("6219a246以上是关于MongoDB数据库入门到精通看这一篇就够了的主要内容,如果未能解决你的问题,请参考以下文章