MongoDB是由10gen公司(现已改名为MongoDB Inc.)用C++语言研发的一款数据库,于2009年开源,MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的
MongoDB按照类似于JSON的格式存储数据,称作BSON (binary json),由成对的field和value构成,value除了数值和字符之外也可以包括数组([ ]),其他文档等
下载地址
官网下载地址
Mongodb术语与关系型数据库差异
传统RDBMS(MySQL) | MongoDB术语 | 说明 |
---|---|---|
DATABASE | DATABASE | 数据库 |
TABLE | COLLECTION | 表/集合 |
ROW | DOCUMENT | 行/文档 |
COLUMN | FIELD | 列(字段)/ 字段(域) |
INDEX | INDEX | 索引 |
TABLE JOIN | 连接运算;MongoDB不支持集合间连接运算 | |
PRIMARY KEY | PRIMARY KEY | 主键,MongoDB默认使用_id field作为主键 |
实验环境
修改yum源
安装mondb
mongodb相关目录
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"

```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 | 根据资源文档的排序获取最后一个文档数据 |
原文:https://www.cnblogs.com/lastyear/p/12013804.html