美文网首页
MongoDB总结上

MongoDB总结上

作者: test小星星 | 来源:发表于2018-10-14 20:48 被阅读6次

    NoSQL简介

    NoSQL,全名为Not only SQL,指的是非关系型数据库。主要作用就提高检索数据的速度,减少用户等待时间。


    NoSQL数据库结构

    MongoDB简介

    MongoDB是一个基于分布式,文件存储的NoSQL数据库。
    由C++语言编写,运行稳定,性能高。
    皆在为WEB应用提供可扩展的高性能数据库存储解决方案。

    关系型SQL和MongoDB的对比

    SQL术语 MongoDB术语 说明
    database database 数据库
    table collection 数据库表/集合
    row document 行记录/文档
    column field 字段/域
    index index 索引
    table joins 表连接,mongodb不支持
    primary key primary key 主键/MongoDB自动将_id字段设置为主键

    MongoDB三元素:数据库、集合、文档。

    • 集合就是关系型数据库中的表。
    • 文档对应着关系型数据库中的行。

    文档:就是一个对象,由键值对构成,是json的扩展Bson形式。
    例如

    {'name': 'zhangsan', 'gender': '男'}
    

    集合:存储多个文档,结构不固定。
    例如

    {'name': 'zhangsan', 'gender': '男'}
    {'name': 'lisi', 'gender': '男', 'age': 18}
    {'course': '语文', 'score': 80}
    

    数据库:是一个集合的物理容器,一个数据库可以包含多个集合

    数据库操作方法

    • 查看当前数据库名称
      db
    • 查看所有数据库名称
      show dbs
    • 切换数据库,如果数据库不存在,则指向数据库,但不创建,直到插入数据库或创建集合时数据库才被创建
      use 数据库名称
    • 删除当前指向的数据库,如果数据库不存在,则什么也不做
      db.dropDatabase()

    集合操作方法

    • 创建集合
      db.createCollection(name, options)
    • name是要创建的集合名称
    • options可选参数,是一个文档,用于指定集合的配置。
    • 例子1:不带参数
    db.createCollection("test")
    
    • 例子2:限制集合大小。
    db.createCollection("test", {capped : true, size : 10})
    
    • 参数cappend:默认值为false表示不设置上限,true表示设置上限。
    • 参数size:当capped值为true时,需要指定此参数,表示设置上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节。
    • 查看当前数据库的集合
      show collections
    • 删除集合
      db.集合名称.drop()

    MongoDB常用的几种数据类型

    数据类型 说明
    Object ID 文档ID
    String 字符串,最常用,必须是有效的UTF-8
    Booolean 存储一个布尔值,true或false
    Integer 整数可以是32位或者64位,取决于服务器
    Double 存储浮点值
    Arrays 数组或列表
    Object 用于嵌入式的文档,即一个值为一个文档。例如{ 'key' : {'key1' : vaule, 'key2' : 'value'} }
    Null 存储Null值
    Timestamp 时间戳
    Date 存储当前日期或时间的UNIX时间格式
    Object ID
    • 每个文档都有一个属性为_id,保证每个文档的唯一性。
    • 可以自己设置_id插入文档
    • 如果没有提供,那么Mongodb为每个文档提供一个独特的_id,类型为objectID
    • objectID是一个12字节的十六进制数
      • 前4个字节为当前时间戳
      • 接下来3个字节为机器ID
      • 接下来的2个字节为MongoDB的服务器进程ID
      • 最后3个字节是简单的增量值

    数据操作方法

    • 插入文档
      db.集合名称.insert(document)
    • 插入文档时,如果不指定_id参数,Mongodb会为文档自动分配一个唯一的ObjectID
      • 例1
      db.test.insert({name: 'zs', age : 18})
      
      • 例2
      db.test.insert({_id : 20181014,'name' : 'zs', age : 18})
      
    • 查询文档
      db.集合名称.find()
    • 更新文档
      db.集合名称.update(<query>, <update>, {multi: <boolean>})
      • 参数query:查询条件,类似sql语句update中where部分。
      • 参数update:更新操作符,类似sql语句update中set部分。
      • 参数multi:默认是false,表示只更新找到的第一条记录,值为true表示把满足条件的文档全部更新。
      • 通过操作符$set可以修改指定的值。如果不加$se修改的是整个文档
      • 例1:把name为zs的文档更新为abc值为111
      db.test.update({'name' : 'zs'}, {'abc' : '111'})
      
      • 例2:把name为zs更新为lisi
      db.test.update({'name' : 'zs'}, {$set:{'name' : 'lisi'}})
      

    例1修改的是整个文档,例2只修改文档name的值。

    • 删除文档
      db.集合名称.remove(<query>, {justOne : <boolean>})

      • 参数query:可选,删除文档的条件
      • 参数justOne:可选,如果设为true或1,则只删除一条,默认false。

      例1:删除匹配到的第一条

      db.test.remove({name : 'lisi'}, {justOne : true})
      

      例2:全部删除

      db.test.remove({})
      

    查询

    • find()方法:查询
      db.集合名称.find({条件文档})
    • findOne()方法:查询,只返回第一个
      db.集合名称.findOne({条件文档})
    • pretty()方法:将结果格式
      db.集合名称.find({条件文档}).pretty()
    • limit()方法:用于读取指定数量的文档
      db.集合名称.find().limit(1)
    • skip()方法:用于跳过指定数量的文档
      • 例1:查询从第3条开始的学生信息
        db.集合名称.find().skip(2)
      • 例2:查询第5到8条数据
        db.集合名称.find().skip(4).limit(4)
    • sort()方法:用于对结果集进行排序
      db.集合名称.find().sort({字段:1})
      • 参数1为升序,-1为降序
    • count()方法:用于同级结果集中的文档条数
      db.集合名称.find().count()
      distinct()方法:对数据进行去重
      db.集合名称.distinct('去重字段',{条件})

    比较运算符

    运算符 说明
    等于,默认是等于判断符
    $lt 小于
    $lte 小于或等于
    $gt 大于
    $gte 大于或等于
    $ne 不等于
    $in 在范围内
    $nin 不在范围内

    例1:查询名称等于lisi的学生

    db.tset.find({name: 'lisi'})
    

    例2:查询年龄大于或等于18的学生

    db.test.find({age: {$get: 18}})
    

    例3:查询年龄为18、28的学生

    db.test.find({age: {$in:[18, 28]}})
    

    逻辑运算符

    运算符 说明
    与,默认是逻辑与的关系
    $or

    例1:查询年龄大于或等于18,并且性别是1的学生

    db.test.find(age: {$gte: 18}, gender: 1)
    

    例2:查询年龄大于18,或者性别为0的学生

    db.test.find({$or: [{age: {$gt: 18}}, {gender: 0}]})
    

    支持正则表达式

    • 使用/.../或$regex编写正则表达式
    • 例如:查询姓张的学生
    db.test.find({name: /^张/})
    db.test.find({name: {$regex: '^张'}})
    

    支持js语法自定义查询

    • 使用$where后面写一个函数,返回满足条件的数据。
    • 例如:查询年龄大于20的学生
    db.test.find({$where: function(){return this.age>20}})
    

    投影

    • 在查询到的结果中,只选择必要字段,而不是一个文档的所有字段。
    • 如:一个文档有5个字段,需要显示只有2个,投影其中2个字段即可
    • 语法
      db.集合名称.find({文档}, {字段名称: 1,...})
    • find()方法的第二个参数为字段与值,值为1表示显示,值为0表示不显示,不设置即为不显示
    • 特殊:对于_id列默认是显示的,如果不显示需要明确设置为0
    • 例1:只显示name字段
    db.test.find({}, {name: 1, _id: 0})
    

    相关文章

      网友评论

          本文标题:MongoDB总结上

          本文链接:https://www.haomeiwen.com/subject/fvezaftx.html