数据库-mongodb

数据库之mongodb

1安装

  • sudo apt-get inatall -y mongodb-org
  • 官网下载
  • 解压
    • tar -zxvf mongodb-linux-x86_64-ubuntu1604-3.4.0.tgz
  • 添加到目录中
    • sudo mv -r mongodb-linux-x86_64-ubuntu1604-3.4.0/ /usr/local/mongodb
  • 添加到执行文件中
    • export PATH=/usr/local/mongodb/bin:$PATH

2基本操作

  • 查看参数
    • mongod --help
  • 启动
    • sudo service mongod start
  • 停止
    • sudo service mongod stop
  • 重启
    • sudo service mongod restart
  • 查看进程
    • ps ajx|grep mongod
  • 注:如果通过官网下载启动方式不同
    • 直接输入 mongod
    • sudo mongod --config /usr/local/mongodb/mongodb.config
    • 默认端口27017
  • 启动本地服务
    • mongo
  • 退出
    • exit / ctrl + c

3基本使用

数据库命令
  • 查看数据库名称
    • db
  • 显示所有数据库
    • show dbs
  • 切换数据库,数据库在插入数据后自动创建
    • use 数据库名称
  • 删除数据库
    • db.dropDatabase()
集合命令
  • 创建集合(也可以不手动创建,插入数据时自动创建)
  • name–名称 options–文件 {capped:true,size:10}–上限
    • db.createCollection(name, options)
    • db.createCollection("stu")
    • db.createCollection("sub", { capped : true, size : 10 } )
  • 显示当前数据库集合
    • show collections
  • 删除数据库
    • db.集合名称.drop()

4数据类型

  • Object ID:文档ID
  • String:字符串,最常用,必须是有效的UTF-8
  • Boolean:存储一个布尔值,true或false
  • Integer:整数可以是32位或64位,这取决于服务器
  • Double:存储浮点值
  • Arrays:数组或列表,多个值存储到一个键
  • Object:用于嵌入式的文档,即一个值为一个文档
  • Null:存储Null值
  • Timestamp:时间戳,表示从1970-1-1到现在的总秒数
  • Date:存储当前日期或时间的UNIX时间格式
  • 语句如下
    • mongodb date (ISODate)对应的为Python中的 datetime()

5数据的增删改

数据的插入更新
  • 插入
    • db.集合名称.insert(document)
    • db.stu.insert({name:'gj',gender:1})
    • s1={_id:'20160101',name:'hr'}
    • s1.gender=0
    • db.stu.insert(s1)
    • db.集合名称.save(doucument)
  • insert 和 save 区别 insert:如果id存在插入报错 save:id 存在修改 不存在添加
  • 更新

    • db.集合名称.update(query ,update,{multi: boolean})
    • 把query更新为update,multi默认false(只更新一条)
    • 注 update 会完全替换原有字段,指定替换加$set
    • db.stu.update({name:'hr'},{$set:{name:'hys'}})
  • 删除

    • db.集合名称.remove(query,{justOne: boolean})
    • db.stu.remove({name:"xh"})

6数据的查询

基本查询
  • db.集合名称.find({条件文档})
  • 输出格式化
    • db.集合名称.find({条件文档}).pretty()
比较运算符
  • 等于,默认是等于判断,没有运算符
  • 小于$lt
  • 小于或等于$lte
  • 大于$gt
  • 大于或等于$gte
  • 不等于$ne
    • db.stu.find({age:{$gte:18}})
逻辑运算符
  • 逻辑与:默认是逻辑与的关系
    • db.stu.find({age:{$gte:18},gender:true})
  • 逻辑或:使用$or,值为数组,数组中每个元素为json
    • db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})
范围运算符
  • 使用” in"" nin” 判断是否在某个范围内
    • db.stu.find({age:{$in:[18,28]}})
正则表达式
  • 使用//或$regex编写正则表达式
    • db.stu.find({name:/^黄/})
    • db.stu.find({name:{$regex:’^黄’}})
自定义查询
  • 使用$where后面写一个函数,返回满足条件的数据
    • db.stu.find({
      $where:function() {
      return this.age>30;
      }
      })
  • 可以指定返回的字段 显示{name:1} 不显示{name:0}
    • db.stu.find({
      $where:function() {
      return this.age>30;
      }
      },{name:1})
Limit Skip
  • 方法limit():用于读取指定数量的文档
    • db.stu.find().limit(2)
  • 方法skip():用于跳过指定数量的文档

    • db.stu.find().skip(2)
  • 配合使用,可以达到分页效果

    • db.stu.find().skip(5).limit(4)
投影(返回结果只显示必要的字段)
  • db.集合名称.find({},{字段名称:1,…})
    • db.stu.find({},{_id:0,name:1,gender:1})
排序
  • db.集合名称.find().sort({字段:1,…})
    • db.stu.find().sort({gender:-1,age:1})
统计个数
  • db.集合名称.find({条件}).count()
    • db.stu.find({gender:true}).count()
  • db.集合名称.count({条件})
    • db.stu.count({age:{$gt:20},gender:true})
消除重复
  • db.集合名称.distinct(‘去重字段’,{条件})
  • 例:查找年龄大于18的学生,来自哪些省份
    • db.stu.distinct(‘hometown’,{age:{$gt:18}})

7聚合

  • 作为数据计算工具,当前数据的输出作为下一个数据的输入
    • db.集合名称.aggregate({管道:{表达式}})
  • 管道
    • $group:将集合中的文档分组,可用于统计结果
    • group字典中有几个键,对应结果有几个键
    • 分组依据接在-id后
    • 取字段,带$符号
    • $match:过滤数据,只输出符合条件的文档
    • $project:修改输入文档的结构,如重命名、增加、删除字段、创建计算结果
    • $sort:将输入文档排序后输出
    • $limit:限制聚合管道返回的文档数
    • $skip:跳过指定数量的文档,并返回余下的文档
    • $unwind:将数组类型的字段进行拆分
  • 表达式
    • sum sum:1 表示以一倍计数
    • $avg:计算平均值
    • $min:获取最小值
    • $max:获取最大值
    • $push:在结果文档中插入值到一个数组中
    • $first:根据资源文档的排序获取第一个文档数据
    • $last:根据资源文档的排序获取最后一个文档数据
  • $group例
    • 例: -id作为分组依据,根据年龄分组,求每组数量
      • db.stu.aggregate({$group:{_id:'$gender', counter:{$sum:1}}})
    • 例: Group by null 求学生总人数、平均年龄
      • db.stu.aggregate({$group:{_id:null,counter:{$sum:1},avgAge:{$avg:'$age'}}})
    • 例:改变输出样式
      • db.stu.aggregate({$group:{_id:'$gender', counter:{$sum:1}}},{$project:{gender:"$-id",counter:"$counter",-id:0}})
    • 例:多字段约束分组去重
      • db.stu.aggregate({$group:{_id:{country:"country",hometown:"hometown"}}})
  • $match例
    • 例 查询年龄大于20的男生、女生人数
      • db.stu.aggregate({$match:{age:{$gt:20}}},{$group:{_id:'$gender',counter:{$sum:1}}})
  • $sort例
    • 例:查询男生、女生人数,按人数降序
      • db.stu.aggregate({$group:{_id:'$gender',counter:{$sum:1}}},{$sort:{counter:-1}})
  • limit, skip例

    • 例:查询2条学生信息
      • db.stu.aggregate({$limit:2})
    • 例:查询从第3条开始的学生信息
      • db.stu.aggregate({$skip:2})
  • $unwind

    • 例:数据字段拆分
      • db.t2.insert({_id:1,item:'t-shirt',size:['S','M','L']})
      • db.t2.aggregate({$unwind:'$size'})
    • 注:按照size拆分,原本数据没有size,会过滤掉
      • 属性preserveNullAndEmptyArrays值为false表示丢弃属性值为空的文档,属性preserveNullAndEmptyArrays值为true表示保留属性值为空的文档
      • db.inventory.aggregate({
        $unwind:{
        path:'$字段名称',
        preserveNullAndEmptyArrays:<boolean> #防止数据丢失
        }})

8创建索引提高查询速度

  • 创建数据
    • for(i=0;i<100000;i++){
      db.t1.insert({name:'test'+i,age:i})
      }
  • 查找姓名为’test10000’的文档
    • db.t1.find({name:'test10000'})
  • 性能分析
    • db.t1.find({name:'test10000'}).explain('executionStats')
  • 建立索引
    • db.集合.ensureIndex({属性:1})

      db.t1.ensureIndex({name:1})
  • 建立索引后查询
    • db.t1.find({name:'test10000'}).explain('executionStats')
  • 索引命令

    • 建立唯一索引,实现唯一约束的功能
      • db.t1.ensureIndex({"name":1},{"unique":true})
    • 联合索引,对多个属性建立一个索引,按照find()出现的顺序
      • db.t1.ensureIndex({name:1,age:1})
    • 查看文档所有索引
      • db.t1.getIndexes()
    • 删除索引
      • db.t1.dropIndex('索引名称')
  • 恢复备份

  • 备份语法
    • mongodump -h dbhost -d dbname -o dbdirectory
    • -h:服务器地址,也可以指定端口号
    • -d:需要备份的数据库名称
    • -o:备份的数据存放位置,此目录中存放着备份出来的数据
    • 例1
      sudo mkdir test1bak
      sudo mongodump -h 192.168.196.128:27017 -d test1 -o ~/Desktop/test1bak
  • 恢复语法
    • mongorestore -h dbhost -d dbname –dir dbdirectory
    • -h:服务器地址
    • -d:需要恢复的数据库实例
    • –dir:备份数据所在位置
    • 例2
      mongorestore -h 192.168.196.128:27017 -d test2 --dir ~/Desktop/test1bak/test1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值