一、mongodb简介:
mongodb是基于分布式文件存储的数据库,它的特点是:高性能、可扩展、易部署、易使用,存储数据非常方便
二、下载安装
1.官网地址:https://www.mongodb.com/try/download/community2.下载完成后,点击安装下载,自定义安装位置,一直点击下一步,直至安装完成。重启电脑。
三、启动配置
3.1 创建目录
在D盘要目录下新建一个mogo_data目录,里面再新建这四个目录文件夹:bin、log、conf、data
3.2 命令行下运行mongodb服务器
切换到安装目录下:执行下面命令:
D:\program files\MongoDB\Server\4.4\bin>mongod --dbpath D:\mongo_data\db
上述截图,代表启动成功。
3.3 连接mongodb
切换到安装目录下:执行下面命令:
D:\program files\MongoDB\Server\4.4\bin>mongo.exe
出现如下截图,代表连接成功。
截图中,可看出mongo shell版本号,连接的数据库信息。
3.4 配置mongodb服务
如上面2.1中,在conf文件夹中,创建一个名为mongod.cfg的文件
文件中配置如下:
systemLog: destination: file path: D:\mongo_data\log\mongod.log storage: dbPath: mongod.log\db
3.5安装mongodb服务
切换到安装目录下:执行下面命令:
mongod.exe --config "D:\mongo_data\conf\mongod.cfg" --install
执行结果如下:
3.6 启动mongodb(管理员运行方式)
运行命令:net start MongoDB
3.7 关闭mongodb服务
运行命令:net stop MongoDB
2.8 MongoDB 后台管理 Shellcmd中执行命令:
mongo
可在shell中进行一些运算,如:
四、基本操作
一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
4.1 基本语法
4.1.1 显示数据列表
show dbs
"local" 是你要链接的数据库。
数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串。
- 不能是空字符串("")。
- 不得含有' '(空格)、.、$、/、\和\0 (空宇符)。
- 应全部小写。
- 最多64字节。
有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。
- admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
- local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
- config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
4.1.2 显示当前数据库对象或集合
db
4.2.3 使用数据库/集合
use 数据库名 use 集合名
五、mongodb实现增删改查:
1. 增:
A. 插入单条数据
db.集合名.insert(json数据)
如:在test2数据库中的NBA集合中插入数据(james,36)
use test2 db.NBA.insert{'james':36}
需要注意的是:如果数据库不存在,集合也不存在,使用上面命令后,则直接创建一个数据库,创建集合并插入数据。
查看是否安装成功
db.NBA.find()
如上图,我们并没有插入id,但是,它自动增加了全球唯一的id数据。
B. 插入多条数据:
db.NBA.insert([{'name':'irving','age':29},{'name':'harden','age':30},{'name':'zion','age':20}])
再次查询一下,是否真正的插入了数据
插入成功。
同时插入20条数据呢?我们不可能一条一条插入吧。我们可以使用for循环来实现,操作如下:
如:我们要插入:A1,A2....A20
for (var i=1;i<=20;i++){ ... ... db.NBA.insert({'name':'A'+i,'age':i})}
如下图:
但是,看提示只插入了一条?我们不是插入20条数据吗?是不是操作不对?
C. 查询插入数据
我们查询看一下:
实际上,我们已经插入了全部数据,但是,它只显示最后一条数据的提示“1”。
2. 查
2.1 查询所有数据
db.NBA.find()
db.集合名.find(),查询所有的数据,上面已经提到过了。
2.2 按条件查询数据
需要注意的是:不管怎么查询,id列都会展示。
2.2.1 查询指定列数据
db.NBA.find({},{'name':1)
查看结果:
只查出来了name字段的数据,age数据未显示。
2.2.2 查询除了选中列剩余列的数据
db.NBA.find({},{'name':0})
查看效果,跟上面刚好相反:
2.3 查询年龄大于16岁的人的信息
那我们就得先了解一下mongodb的大于小于运算符:
- $gt:大于
- $lt:小于
- $gte:大于或等于
- $lte:小于或等于
- $in:在什么区间
- $nin:不在什么区间
查询大于16岁,开始:
db.NBA.find({age:{$gt:16}})
查看结果:
2.4 查询年龄等于20、30、36的人的数据
db.NBA.find({'age':{$in:[20,30,36]}})
结果如下:
另外:可以将数据显示成更加美观:
db.NBA.find().pretty()
3. 改
语法:db.集合名.update(条件,新数据[是否新增,是否修改多条])
我们需要再了解一下修改相差参数:
- $inc :传递
- $rename :重命名列
- $set :修改列值
- unset :删除列
3.1 修改数据库中名为zion更改为luca
db.NBA.update({name:'zion'},{$set:{name:'luca'}})
注意:修改的值必须加上引号,否则,会提示未定义:
查看结果:
3.2 将luca的年龄+1岁
db.NBA.update({name:'luca'},{$inc:{age:1}})
同样的,有加当然也有减。再来,由于手误,年龄改错了,再改回原来的:
db.NBA.update({name:'luca'},{$inc:{age:-1}})
3.3 综合复杂练习
A. 插入数据:name:steven,age:31,xb:男
db.NBA.insert({name:'steven',age:31,xb:'男'})
B. 修改name为:curry
db.NBA.update({name:'steven'},{$set:{name:'curry'}})
C. 将其年龄增加1岁
db.NBA.update({name:'curry'},{$inc:{age:1}})
D. 修改xb列为sex
db.NBA.update({name:'curry'},{$rename:{xb:'sex'}})
E. 删除性别数据
db.NBA.update({name:'curry'},{$unset:{'sex:'男'}})
F. 修改数据不存在,加参数true可插入数据
db.NBA.update({name:'book'},{$set:{age:25}},true)
true参数意义:无该条数据时,则插入。
G. 将多条数据,年龄都改成28岁
db.NBA.update({},{$set:{age:28}},false,true)
true代表全部
默认为flase不写
4. 删
语法:db.集合名.remove(条件,[是否删除一条])
true是,false否默认,删除第1条数据
db.NBA.remove({},true)
如果删除全部数据,则不加条件:
db.NBA.remove({})
工作中慎用。
5. 排序和筛选
语法:db.集合名.find().sort().skip(数字).limit(数字)
skip可选,1代表升序,-1代表降序
5.1 按年龄降序排列,只查询2两数据
首先定义表结构:
查询两条数据以倒序排列
db.CBA.find().sort({age:-1}).limit(2)
数据库的基本操作,暂时介绍到这里,下一期,将介绍用mongo实现接口开发简易接口,并测试。