MongoDB

相关文档:Windows安装MongoDB(图解)

一、安装

1、在Ubuntu中安装

在Linux中欧安转MongoDb
sudo apt-get install mongodb
开启服务
sudo service mongodb start
关闭服务
sudo service mongodb stop
4、重启服务
sudo service mongodb restart
注意:
如果是系统非正常关闭,这样启动会报错,由于mongodb自动被锁上了,这是需要进入mongodb数据库文件所在的目录(/var/lib/mongodb/),删除目录中的mongodb.lock文件,然后再进行上述操作。

如果想让远程连接

需要修改 /etc/mongodb.conf 
打开文件:          
sudo vim /etc/mongodb.conf
注释掉 bind 127.0.0.1

2、MongoDB在Windows中安装

网址:https://www.mongodb.com/download-center/community

把bin目录添加到path环境变量中:
C:\Program Files\MongoDB\Server\4.2\bin
  • 校验是否安装成功:

在cmd里输入mongo

  • 启动MongoDB

二、基本命令

show dbs 展示数据库
cls 清屏命令
use 库名:切换数据库/创建数据库
db:查看当前数据库
show tables /show collectons 查看当前使用数据库的集合
db.表名:创建表
db.表名.insert(数据) 插入数据
db.dropDatabase():删除数据库

1、插入数据

  • 不手动创建表(当没用这个表的时候,插入一条数据,表自动创建)
db.集合名.insert({})  数据格式为json,id不能重复,支持多条插入数据库

2、手动创建集合

db.createCollection('sub',{capped:true,size:10})
name:要创建的集合名称
options:可选参数,只当有关内存大小及索引的选项
参数capped:默认值为false表示不设置上限,值为true表示设置上限
参数size:当capped值为true时,需要制定此参数。表示上限大小,当文档达到上限时,会将之前的数据
覆盖,单位为字节

3、查看集合

show collections

4、删除集合

db.集合名称.drop()

三、MongoDB的数据类型

  • string:字符串,必须是有效的UTF-8
  • Boolean:存储一个布尔值,true或者false
  • Integer:整数可以是32位或64位,这取决于服务器
  • Double:存储浮点数
  • Arrays:数组或列表
  • Object:嵌入式文档
  • Null:存储Null值
  • Timestamp:时间戳,表示从1970-1-1到现在的总秒数
  • Object ID:是一个12字节的十六进制。

四、数据库命名规范

  • 不能是空字符串
  • 不得含有特殊字符
  • 应全部小写
  • 最多64个字节
  • 数据库名不能与现有系统保留库同名,如admin,local

五、MongoDB的增删改查

mongoDB中一张表称为一个集合

1、mongoDB插入数据

        db.集合名.insert({})  数据格式为json,id不能重复,支持多条插入数据库

  • 单条插入数据
db.jerry_collection.insert({x:1})
  • 多条插入数据
for(i=3;i<10;i++)db.jerry3.insert({x:i})

mongodb的保存

命令:

db.集合名称.save(document)
db.stu.save({_id:ObjectId("5f169b37d74866264ed9a7db"), name:'gj', gender:2})
db.stu.save({name:'gj', gender:2})
db.stu.find()

2、MongoDB查询数据

db.stu.insert([{"name" : "张三", "hometown" : "长沙", "age" : 20, "gender" : true },
{"name" : "老李", "hometown" : "广州", "age" : 18, "gender" : false },
{"name" : "王麻子", "hometown" : "北京", "age" : 18, "gender" : false },
{"name" : "刘六", "hometown" : "深圳", "age" : 40, "gender" : true },
{"name" : "jerry", "hometown" : "长沙", "age" : 16, "gender" : true },
{"name" : "小永", "hometown" : "广州", "age" : 45, "gender" : true },
{"name" : "老amy", "hometown" : "衡阳", "age" : 18, "gender" : true }])
  • 查找所有数据
db.jerry_collection.find({条件⽂档})
  • 方法pretty():将结果格式化
db.集合名称.find({条件⽂档}).pretty()
  • 查询单条数据
db.jerry_collection.findOne({条件⽂档})
  • 带有条件的查询
查询x等于100的数据
db.jerry_collection.find({x:100})

查询x等于100,y等于99的
db.jerry_collection.find({x:100,y:99})
  • 比较运算符
等于:默认是等于判断,没有运算符
小于:$lt
小于等于:$lte
大于:$gt
大于等于:$gte

查询y大于等于18的数据
db.jerryn_collection.find({y:{$gte:18}})
  • 范围运算符
使用$in,$nin判断是否在某个范围内查询年龄为18、28的学生
db.jerry_collection.find({age:{$in:[18,28]}})
  • 逻辑运算符
or:使用$or,值为数组,数组中每个元素为json
db.jerry_collection.find({$or:[{age:{$gt:18}},{gender:false}]})
  • 自定义查询

mongo shell 是一个js的执行环境,使用$where 写一个函数, 返回满足条件的数据

查询年龄大于30的学生
db.jerry_collection.find({
 $where:function() {
     return this.age>30;}
})
  • 查询结果操作
  • 查出的数据求总数
db.jerry_collection.find().count()
  • limit和skip
limit用于读取指定数量的文档
db.jerryn_collection.find().limit(2)

skip用于跳过指定数量的文档
db.jerry_collection.find().skip(2)

limit和skip同时使用
db.jerry_collection.find().skip(2).limit(2)
  • 映射
指定返回的字段,如果为1则返回改字段,如果为0则除了改字段外所有字段返回。id如果没写会默认返回
db.jerry_collection.find({},{_id:1})
  • 排序
按照年龄升序排序
db.jerry_collection().find().sort({age:1})

按照年龄降序排序
db.jerry_collection().find().sort({age:-1})

3、修改数据

db.集合名称.update({query}, {update}, {multi: boolean})
  • 参数query:查询条件
  • 参数update:更新操作符
  • 参数multi:可选,默认是false,表示只更新找到的第一条数据,值为true表示把满足条件的数据全部更新
db.jerry_collection.insert({x:100,y:100,z:100})
{ "_id" : ObjectId("59b297dd8fa0c171faae5bc8"), "x" : 100, "y" : 100, "z" : 100 }

db.jerry_collection.update({x:100},{y:99})
修改后数据变为  
{ "_id" : ObjectId("59b297dd8fa0c171faae5bc8"), "y" : 99 }

部分更新
db.jerry_collection.update({x:100},{$set:{y:99}})

如果y:100数据不存在,就插入y:101这条数据,第三个参数为true
db.jerry_collection.update({y:100},{y:101},true)

更新多条
db.jerry_collection.update({y:99},{$set:{y:101}},{multi:true})

4、删除数据

db.jerry_collection.remove({条件},{justOne:true})  mongoDB为了防止误删除,条件必须写
db.jerry_collection.remove()   删除所有数据,索引不会删除
db.jerry_collection.remove({x:100})
  1. 删除表
db.jerry_collection.drop()
  1. 聚合

        聚合是基于数据处理的聚合管道,每个文档通过一个由多个阶段组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果

  1. 常用的管道
$group:将集合中的文档分组,可用于统计结果
$match:过滤数据,只输出符合条件的文档
$sort:将输入文档排序后输出
$limit:限制聚合管道返回的文档书
$skip:跳过指定数量的文档,并返回余下的文档

测试数据:db.

db.stu.insert({name:"a", hometown: '东北', age: 20, gender: true})
db.stu.insert({name:"b", hometown: '长沙', age: 18, gender: false})
db.stu.insert({name:"c", hometown: '武汉', age: 18, gender: false})
db.stu.insert({name:"d", hometown: '华山', age: 40, gender: true})
db.stu.insert({name:"e", hometown: '山东', age: 16, gender: true})
db.stu.insert({name:"f", hometown: '江苏', age: 45, gender: true})
db.stu.insert({name:"g", hometown: '大理', age: 18, gender: true})

5、表达式

处理输⼊⽂档并输出

语法:表达式:'$列名'

常⽤表达式:

$sum: 计算总和, $sum:1 表示以⼀倍计数
$avg: 计算平均值
$min: 获取最⼩值
$max: 获取最⼤值
$push: 在结果⽂档中插⼊值到⼀个数组中
$first: 根据资源⽂档的排序获取第⼀个⽂档数据
$last: 根据资源⽂档的排序获取最后⼀个⽂档数据

5.1 $group

将集合中的文档分组,课用于统计结果

_id表示分组的依据,使用某个字段的格式为 '$字段

按照gender分组

db.students.aggregate(
    {$group:{_id:'$gender',count:{$sum:1}}}
)

按照gender分组,获取不同组的平均年龄

db.students.aggregate(
    {$group:{_id:'$gender',count:{$sum:1},avg_age:{$avg:"$age"}}}
)

5.2 $match

match是管道命令,能将结果交给后一个管道

查询年龄大于20的学生

db.students.aggregate(
    {$match:{age:{$gt:20}}}
)

查询年龄大于20的男生,女生人数

db.students.aggregate(
    {$match:{age:{$gt:20}}},
    {$group:{_id:'$gender',count:{$sum:1}}}
)

六、Mongodb创建索引

     为什么mongdb需要创建索引?加快查询速度、进行数据的去重

1、mongodb创建简单的索引方法

语法:db.集合名.ensureIndex({属性:1}),1表示升序, -1表示降序

2、创建索引前后查询速度对比

  • 创建索引前
db.test.find({name:'test9999'})
db.test.find({name:'test9999'}).explain('executionStats') # 显示查询操作的详细信息
  • 创建索引
db.test.ensureIndex({name:1})
  • 创建索引后
db.test.find({name:'test9999'}).explain('executionStats')
  1. 索引的查看
默认情况下_id是集合的索引
查看方式:db.集合名.getIndexes()
  1. 删除索引
语法:db.集合名.dropIndex({'索引名称':1})
db.test.dropIndex({name:1})
db.test.getIndexes()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小马哥-码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值