MongoDB-增、删、改、查

database相关的命令
  • 查看当前的数据库
    • db
  • 查看所有的数据库
    • show dbs  /  show databases
  • 切换数据库
    • use db_name
      • 如果数据库不存在也不会报错,会是选择数据库的状态,当向其中添加集合后自动创建
  • 删除当前的数据库
    • db.dropDatabase()
集合相关的命令(相当于mysql的表结构)
  • 手动创建集合
    • db.createCollection(collection_name, {capped: <Boolean>, size: <int>} )
      • collection_name: 为创建集合的名称
      • 参数capped: 默认值为false表示不设置上限,值为true表示设置上限
      • 参数size: 参数可选,当capped值为true时, 需要指定此参数, 表示上限⼤⼩,当⽂档达到上限时, 会将之前的数据覆盖, 单位为字节
    • 示例:
      • db.createCollection("stu")
      • db.createCollection("sub", { capped : true, size : 10 } )
  • 自动创建集合
    • db.集合名称.insert( <data> )
      • 要指定创建的集合名称,添加的数据应该为字典类型的数据
      • 向一个不存在的集合装添加数据,便会自动创建出包含添加数据的集合
  • 查看集合
    • show  collections
  • 删除集合
    • db.集合名称.drop( )
集合数据增删改查
  • mongodb支持的数据类型
    • Object ID: ⽂档ID
    • String: 字符串, 最常⽤, 必须是有效的UTF-8
    • Boolean: 存储⼀个布尔值, true或false(mongodb中的布尔类型是小写)
    • Integer: 整数可以是32位或64位, 这取决于服务器
    • Double: 存储浮点值
    • Arrays: 数组或列表, 多个值存储到⼀个键
    • Object: ⽤于嵌⼊式的⽂档, 即⼀个值为⼀个⽂档
    • Null: 存储Null值(对应python中的None)
    • Timestamp: 时间戳, 表示从1970-1-1到现在的总秒数
    • Date: 存储当前⽇期或时间的UNIX时间格式,
  • mongodb数据操作的注意点
    • 创建mongodb⽇期Date语句如下 
      • 在终端中
        • new Date('2017-12-20')       参数的格式为YYYY-MM-DD   
      • 在python代码中
        • datetime.datetime( )     参数格式为y, M, d, h, m, s    
        • datetime.datetime.now( )
    • 文档的_id属性
      • 每个⽂档都有⼀个_id属性,当创建一个文档的时候,如果没有指定_id 的数值,mongodb会自动创建一个_id属性, 类型为objectID
      • objectID是⼀个12字节的⼗六进制数:前4个字节为当前时间戳, 接下来3个字节的机器ID, 接下来的2个字节中MongoDB的服务进程id, 最后3个字节是简单的增量值
  • 数据的插入
    • 命令格式
      • db.collection_name.insert(<document>)            向集合中插入文档数据
        • <document>字典形式的数据,在终端中键可以不加引号
        • 插⼊⽂档时, 如果不指定_id参数, MongoDB会为⽂档分配⼀个唯⼀的ObjectId
        • 当插入的_id已经存在的时候,会报错
        • 插入多条数据的时候,可以用逗号隔开,放在一个列表里进行插入
    • 示例
      • db.stu.insert({name:'gj',gender:1})
      • db.stu.insert({_id:"20170101",name:'gj',gender:1})
  • 数据的删除
    • 命令格式
      • db.collection_name.remove(<query>,{justOne: <boolean>})
        • <query>: 参数可选,删除⽂档的条件, 不加改参数全部删除
        • justOne: 参数可选, 如果设为true或1, 则只删除第⼀条, 默认false, 表示删除多条
  • 数据的修改
    • 替换单条数据
      • 命令格式
        • db.collection_name.save(<document>)                替换单条文档数据
          • 如果⽂档的_id已经存在则替换, 如果⽂档的_id不存在则新建并插入
      • 示例:
        • db.stu.save({name:'gj',gender:1})
    • 批量替换数据
      • 命令格式
        • db.集合名称.update(<query> ,<update>,{multi: <boolean>})      替换满足条件文档数据
          • <query>:    查询条件参数, 字典类型数据
          • <update>:  更新操作符,有字典形式和$set两种形式
            • {update}     会将匹配到的文档替换为update更新后的文档
            • {$set: { update }}   可以将update更新的字段内容,只进行对应字段的替换
          • multi:     参数可选,字典类型数据,默认是false,表示只更新找到的第⼀条记录, 值为true表示把满⾜条件的⽂档全部更新
            • multi 只有在$set模式下才能使用,在非$set模式下只能更新第一条数据
          • 如果$set 后面加的字段不存在,那么将会新增字段
      • 示例:
        • db.stu.update({name:'hr'},{name:'mnc'})   更新一条
        • db.stu.update({name:'hr'},{$set:{name:'hys'}})    更新一条
        • db.stu.update({},{$set:{gender:0}},{multi:true})   更新全部
  • 数据的查询
    • 命令格式:
      • db.集合名称.find(<query>)                满足条件文档数据的查询
        • db.集合名称.find(<query>).pretty()      对文档查询结果进行格式化
          • <query>   查询条件参数.
          • 当<query> 参数为空的时候,默认会查询集合中的所有数据
      • db.集合名称.findOne(<query>)           满足条件的第一个文档数据的查询
        • <query>   查询条件参数.
数据查询过滤条件(筛选数据使用)
  • 运算符
    • 比较运算符
      •                 等于(默认是等于判断, 没有运算符
      • $lt           ⼩于(less than)
      • $lte         ⼩于等于(less than equal)
      • $gt          ⼤于(greater than)
      • $gte        ⼤于等于
      • $ne          不等于
      • 示例:
        • db.stu.find({age:{$gte:18}})
    • 逻辑运算符
      • 逻辑与关系
        • and           在{ }写多个条件即可
        • 示例:
          • db.stu.find({age:{$gte:18},gender:true})
      • 逻辑或关系
        • or             使⽤$or(值为数组, 数组中每个元素为json
        • 示例:
          • db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})       一个文档多个字段限制
          • db.stu.find({age: {$gte: 16, $lt: 45}})          一个字段多个限制
      • 逻辑与/逻辑或的综合应用
        • 示例:
          • db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'gj'})
    • 范围运算符
      • $in         用来判断是否在某个范围内
      • 示例:
        • db.stu.find({age:{$in:[18,28]}})  查询年龄为18、28的学生
  • 正则表达式
    • //    或     $regex     编写正则表达式
    • 示例:
      • db.stu.find({name:/^⻩/})
      • db.stu.find({name:{$regex:'^⻩'}})
  • 自定义查询
    • 作用:mongodb支持js进行筛选,使⽤$where后⾯写⼀个函数, 返回满⾜条件的数据
    • 示例:
      • db.stu.find({    
        • $where:function() {        
          • return this.age>30;}
      • })
    • 备注:
      • Mongodb shell支持js,可以使用$where来定义自定义的查询规则,后面接的是js函数
      • this会遍历文档中每一条数据
对查询结果进行处理(筛选、排序、统计)
  • 投影
    • 作用
      • 在查询到的返回结果中, 对查询结果的字段进行筛选
    • 命令格式
      • db.集合名称.find(<query>,{字段名称:1,...})
        • <query>:    查询条件参数, 字典类型数据,{} 表示所有文档数据
        • 参数为字段与值, 值为1表示显示,值为0不显
        • _id 字段默认的值为1,如果不定义会默认显示_id字段
    • 示例:
      • db.stu.find({},{_id:0,name:1,gender:1})
  • limit与skip
    • limit()  方法
      • 作用
        • ⽤于读取指定数量的⽂档,对查询的结果进行筛选
      • 命令格式:
        • b.集合名称.find().limit(NUMBER)
      • 示例:
        • db.stu.find().limit(2) 
    • skip()  方法
      • 作用
        • ⽤于跳过指定数量的⽂档
      • 命令格式:
        • db.集合名称.find().skip(NUMBER)
      • 示例:
        • db.stu.find().skip(2)
    • 备注:
      • limit()与skip() 同时使用的时候,先使用skip() 在使用limit( )
  • 排序
    • 作用
      • 对查询的结果集进行排序
    • 命令格式
      • db.集合名称.find().sort({字段:1,...})
        • 参考字段排序,参数1为升序排列
        • 参考字段排序,参数-1为降序排列
    • 示例
      • db.stu.find().sort({gender:-1,age:1})
  • 统计个数
    • 命令格式
      • db.集合名称.find({条件}).count()
      • db.集合名称.count({条件})
    • 示例:
      • db.stu.find({gender:true}).count()
      • db.stu.count({age:{$gt:20},gender:true})
  • 去重查询
    • 命令格式
      • db.集合名称.distinct('去重字段',<query>)
        • <query>:查询条件参数, 字典类型数据
        • 字段表示,根据哪个字段进行去重查询
        • 返回的是包含去重后字段值组成的列表
    • 示例
      • db.stu.distinct('hometown',{age:{$gt:18}})

刘小恺(Kyle) wechat
如有疑问可联系博主