mongodb操作重点

基础命令

  • 查看当前的数据库:db
  • 查看所有的数据库:show dbs /show databases
  • 切换数据库:use db_name
  • 删除当前的数据库:db.dropDatabase()

关于集合的基础命令

  • 不手动创建集合:向不存在的集合中第一次加入数据时,集合会被创建出来
  • 手动创建
    db.createCollection(name,options)
    db.createCollection("stu")
    db.createCollection("sub",{capped:true,size:10})
    参数capped:默认值为false表示不设置上限,值为true表示设置上限
    参数size:当capped值为true时,需要指定此参数,表示上限大小,当
    文件达到上限时,会将之前的数据覆盖,单位为字节
    
  • 查看集合:show collections
  • 删除集合:db.集合名字.drop()

数据类型

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

插入

  • db.集合名称.insert(document)
  • db.stu.insert({name:"test",age:10})
  • db.stu.insert({_id:"202007131742",name:"de",age:1)
  • 插入文档时,如果不指定_id参数,MongoDB会为文档分配一个唯一的ObjectId

保存

  • db.集合名称.save(document)
  • 如果文档的_id已经存在则修改,如果文档的_id不存在则添加

更新

  • db.集合名称.update(<query>,<update>,{<multi:<boolean>>})
    	db.stu.update({name:"hr"},{name:"mmp"})  更新一条(替换,其他属性会缺失)
    	db.stu.update({name:"hr"},{$set:{name:"mmp"}})  更新一条
    	db.stu.update({},{$set:{age:10}},{multi:true})  更新全部
    
    • query:查询条件
    • update:更新操作符
    • multi:可选,默认时false,表示只更新找到的第一条记录,true表示把满足条件的文档全部更新

删除

  • db.集合名称.remove(<query>,{justOne:<boolean>})
    • query:可选,删除的文档的条件
    • justOne:可选,默认时false,表示删除多条,设置为true或1,则只删除一条

查询

  • 方法find():查询-->db.集合名称.find({查询条件})
  • 方法 findOne():查询,只返回第一条-->db.集合名称.findOne({查询条件})
  • 方法 pretty():将结果格式化-->db.集合名称.find({查询条件}).pretty()

比较运算符

  • 等于:默认是等于判断,没有运算符
  • 小于:$lt(less than)
  • 小于等于:$lte(less than equal)
  • 大于:$gt(greater than)
  • 大于等于:$gte(greater than equal)
  • 不等于:$ne(no equal)
  • db.stu.find({age:{$lte:10}})

范围运算符

  • 在某个范围:$in
  • 不在某个范围:$nin
  • db.stu.find({age:{$in:[18,28,38]}})

逻辑运算符

  • and:在json中写多个条件即可
  • or:使用$or,值为数组,数组中每个元素为json
  • 年龄大于等于18,且性别为true:db.stu.find({age:{$gte:18},gender:true})
  • 年龄大于18,或性别为false:db.stu.find({$or:[age:{$gte:18},gender:false]})
  • 年龄大于18,或性别为false,且名字时"test":db.stu.find({$or:[age:{$gte:18},gender:false],name:"test"})

正则

  • 使用//或者$regex编写正则表达式
  • 以abc开头的:db.stu.find({sku:/^abc/})
  • 以123结尾的:db.stu.find({sku:{$regex:"123$"}})

limit和skip

  • limit():用于读取指定数量的文档-->db.stu.find().limit(4)
  • skip():用于跳过指定数量的文档-->db.stu.find().skip(5)
  • 同时使用-->db.stu.find().limit(4).skip(5)或db.stu.find().skip(5).limit(4)(翻页)

自定义查询*

  • 使用$whert后面写一个函数,范围满足条件的数据
  • db.stu.find({$where:function(){return this.age>30;}})
  • db.stu.find().sort({age:1}) 按年龄排序:1升序,-1降序
  • db.stu.find().count()或db.stu.count() 统计数量
  • db.stu.distinct("name",{age:{$gt:18}}) 消除重复(去除大于18、名字重复的数据)

投影

  • 在查询到的返回结果中,只选择必要的字段
  • db.stu.find({},{filed:1,...)
    • 参数为字段与值,值为1表示显示,值为0表示不显示
    • 特殊:对于_id列默认时显示的,如果不显示需要明确设置为0
    • 其他字段,如果不显示不写,不能写0

数据的备份和恢复

  • 备份数据:mongodump -h dbhost -d dbname -o dbdirectory

    • h:服务器地址,也可以指定端口号
    • d:需要备份的数据库名称
    • o:备份的数据存放位置,此目录中存放着备份出来的数据
    • mongodump -h 192.168.1.65:27017 -d test1 -o ~/Desktop/test1bak
  • 恢复数据:mongorestore -h dbhost -d dbname --dir dbdirectory

    • h:服务器地址
    • d:需要恢复的数据库实例
    • dir:备份的数据所在位置
    • mongorestore -h 192.168.1.65:27017 -d test2 --dir ~/Desktop/test1bak/test1

聚合aggregate

  • 聚合时基于数据处理的聚合管道,每个文档通过一个由多个阶段组成的管道,可以对每个阶 段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果
  • db.集合名称.aggregate({管道:{表达式}})
  • db.stu.aggregate([{$match:{status:"A"}}, {$group:{_id:"$cust_id",total:{$sum:"$amount"}}}])

常用管道

  • 在mongodb中,文档处理完毕后,通过管道进行下一次处理
  • $group:将集合中的文档分组,可用于统计结果
    • $group对应的字典里有几个键,结果就有几个键
    • 分组依据要放到_id后面
    • 去不同的字段的值需要使用$,如:"$age","$name"
    • 取字典嵌套中的值的时候$_id.age
    • 能够同时按照多个键进行分组{$group:{_id:{age:"$age",name:"$name"}}}
      • 结果是:{_id:{age:18,name:"xiaom"}}
  • $match:过滤数据,只输出符合条件的文档
  • $project:修改输入文档结构,如重命名、增加、删除字段、创建计算结果
  • $sort:将输入的文档排序后输出
  • $limit:限制聚合管道返回的文档数
  • $skip:跳过指定数量的文档,并返回余下的文档
  • $unwind:将数组类型的字段进行拆分

表达式

  • 处理输入文档并输出
  • 语法:表达式:"$列名"
  • $sum:计算总和,$sum:1表示以一倍计数
  • $avg:计算平均值
  • $min:获取最小值
  • $max:获取最大值
  • $push:在结果文档中插入值到一个数组中
  • $first:根据资源文档的排序获取第一个文档数据
  • $last:根据资源文档的排序获取最后一个文档数据
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章