MongoDB安装与基本操作
MongoDB
-
MongoDB是由10gen公司(现已改名为MongoDB Inc.)用C++语言研发的一款数据库,于2009年开源,MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的
-
MongoDB按照类似于JSON的格式存储数据,称作BSON (binary json),由成对的field和value构成,value除了数值和字符之外也可以包括数组([ ]),其他文档等
- 每一条数据称作一个文档(document)
- 相对传统关系型数据库,文档之间可以有不一样的格式(字段field),因此更加灵活
- 可以为数据创建索引,使用特定查询方式来分析统计数据
- MongoDB开源免费,遵从GNU GPL协定
-
下载地址
官网下载地址 -
Mongodb术语与关系型数据库差异
传统RDBMS(MySQL) MongoDB术语 说明 DATABASE DATABASE 数据库 TABLE COLLECTION 表/集合 ROW DOCUMENT 行/文档 COLUMN FIELD 列(字段)/ 字段(域) INDEX INDEX 索引 TABLE JOIN 连接运算;MongoDB不支持集合间连接运算 PRIMARY KEY PRIMARY KEY 主键,MongoDB默认使用_id field作为主键 -
实验环境
- centos7 192.168.10.40
- 注:主机以关闭防火墙和selinux且可以连接外网
-
修改yum源
-
安装mondb
-
mongodb相关目录
- 参数文件位置:/etc/mongod.conf
- 数据文件位置:/var/lib/mongo
- 默认日志文件位置:/var/log/mongodb/mongod.log
-
mongodb相关控制命令
-
关闭服务:systemctl stop mongod
-
启动服务:systemctl start mongod
-
重启服务:systemctl restart mongod
-
-
修改配置允许远程连接
vi /etc/mongod.conf net: port: 27017 bindIp: 0.0.0.0
-
连接mongodb
或
-
-
mongodb常用管理命令
-
查看存在的数据库
-
查看存在的集合
-
创建数据库和集合
另一中创建集合的方法
show dbs; #查看所有存在的数据库 use newdb; #切换至newdb,该数据库不存在,插入集合后会自动创建 db; #查看当前所在数据库 db.tcollection.insertOne({x:1}); #创建集合并插入一条数据,隐式创建 db.createCollection("C1") #创建集合c1,显示创建 show collections; #查看当前数据库中的集合
-
集合的删除
db.c1.drop(); #删除集合 show collections;
-
删除数据库
use newdb; db; db.dropDatabase(); #删除数据库 show dbs;
-
-
mongodb常用操作命令
-
插入文档
>use db1; > db.createCollection("users"); #创建users集合 > db.users.insertOne( #insertOne插入一个文档 ... { ... name:"zs", #文档中的字段 ... age:26, ... status:"pending" ... } ... ); #分号可省略 { "acknowledged" : true, #创建是否成功,true或false "insertedId" : ObjectId("5dee2dbaf3416e250ce4a88c") #自动生成的主键 }
-
插入多条记录
db.users.insertMany([{name:"ls", age:29, status:"pending"},{name:"we", age:22, status:"pending"},{name:"mz", age:27, status:"pending"},{name:"na", age:25, status:"pending"}]);
-
查询集合中所有文档
db.users.find();
-
查询集合中所有文档指定显示的字段
db.users.find({},{name:1,age:1});
-
查找其中年龄大于等于26的name
db.users.find({age:{$gte:26}},{name:1,age:1});
-
修改zs的年龄为27
db.users.updateOne({name:"zs"},{$set:{age:27}}); db.users.find({name:"zs"},{name:1,age:1}); #$set 为字段赋值
-
将所有人的status改为"rejected"
db.users.updateMany({},{$set:{status:"rejected"}}) db.users.find({},{status:1});
将年龄大于26的人的status改为"accepted" ![image-20191209195742519](https://img2018.cnblogs.com/blog/1241092/201912/1241092-20191209221617299-719527808.png) ```shell db.users.updateMany({age:{$gt:26}},{$set:{status:"accepted"}}) db.users.find({},{age:1,status:1});
-
删除年龄小于24的人
db.users.find({},{age:1});
-
删除user集合中所有的文档
db.users.deleteMany({}) db.users.find();
-
mongodb中的常用比较运算符
运算符 说明 $eq 等于指定值 $gt 大于指定值 $gte 大于等于指定值 $in in 指定的数组的值列表中 $lt 小于指定的值 $lte 小于指定的值 $ne 不等于指定的值 $nin not in 指定的数组的值列表中 -
mongodb中的常用逻辑运算符
运算符 说明 $and 与运算符; { $and: [ { }, { } , ... ] } $not 非运算符;{ field: { $not: { } } } $or 或运算符;{ $or: [ { }, { }, ... ] } -
显示年龄在20到25之间(包含20和25)的文档
-
-
mongodb数据定义语言
-
为users集合中的zs添加"gender" 字段,值为"female"
db.users.updateOne({"name":"zs"},{$set:{"gender":"female"}}) db.users.find()
-
为所有不存在"gender"字段的文档添加该字段,默认为"";
db.users.updateMany({gender:{$exists:false}},{$set:{gender:""}}) db.users.find(); #$exists 判断字段是否存在 #$set 赋值
-
设置mz和ls的gender为male
db.users.updateMany({name:{$in:["ls","mz"]}},{$set:{gender:"male"}}) db.users.find(); #$in 在某个范围内
-
将gender为空的文档删除gender字段
db.users.updateMany({gender:{$eq:""}},{$unset:{gender:""}}) db.users.find(); #$unset 撤销赋值,删除该字段
-
-
分组统计
-
创建stu表并插入数据
-
查找最高分
db.stu.aggregate([{$match:{}},{$group:{_id:"",maxscore:{$max:"$score"}}}]) #aggregate() 聚合函数 #$match 过滤数据 #$max 求最大值 #其他常用函数 #$project 修改输入文档的结构 #$limit 用来限制MongoDB聚合管道返回的文档数 #$skip 在聚合管道中跳过指定数量的文档,并返回余下的文档 #$unwind 字段拆分 #$group 分组 #$sort 排序 #$geoNear 输出接近某一地理位置的有序文档
-
统计每个班级内的最高分
db.stu.aggregate([{$match:{}},{$group:{_id:"$cno",maxscorce:{$max:"$score"}}}]) #_id为0表示其cno为null,数值型强制转换为0
-
统计每个班级内的最高分,不计算未分班的学生
db.stu.aggregate([{$match:{cno:{$ne:0}}},{$group:{ _id:"$cno",maxscore:{$max:"$score"}}}])
-
统计1班中男女生的人数
db.stu.aggregate([{$match:{cno:1}},{$group:{_id:"$sex",cnt:{$sum:1}}}])
-
统计每个班人数,按照分组列排序(不含未分班的学生)
db.stu.aggregate([{$match:{cno:{$ne:0}}},{$group:{_id:"$cno",cnt:{$sum:1}}},{$sort:{_id:1}}])
-
对班号进行去重操作
db.stu.distinct("cno")
-
mongodb中的函数表达式
表达式 描述 $sum 计算总和 $avg 计算平均值 $min 获取集合中所有文档对应值得最小值 $max 获取集合中所有文档对应值得最大值 $push 在结果文档中插入值到一个数组中 $addToSet 在结果文档中插入值到一个数组中,但不创建副本 $first 根据资源文档的排序获取第一个文档数据 $last 根据资源文档的排序获取最后一个文档数据
-