zoukankan      html  css  js  c++  java
  • Mongodb使用

    模式自由:可以把不同结构的文档存储在同一个数据库里

    面向集合的存储:适合存储json风格文件的形式

    完整的索引支持:对任何属性可索引

    复制和高可用性:支持服务器之间的数据复制,支持主从模式及服务器

    常用的NoSQL常用的四大类:

    redis:   键值型(键值数据库是形式最简单的NoSQL,数据中每一个值都有专门的键值对匹配,)

    Mongodb: 文档型(文档数据库以类似文档的结构存储数据,可以采用无模式的形式,数据要求不严格,表结构可变)

    HBase: 列存储(以列簇式存储,将同一列数据存在一起,在处理大数据集的时候,就可以具备更高的性能和扩展性)

    Ne04J:图形(类似于图的结构存储数据,可以利用图结构相关算法,便于探索数据之间的联系)

    NoSQL的缺点:

    1:不支持SQL语句:不支持SQL支持,学习和使用成本高

    2:提供的功能有限:无事务处理,完整的解决方案和报表等支持不好

    3:稳定性:产品的完善程度和稳定性,不能和几十年历史的关系型数据库相提并论

    SQL术语/概念 MongoDB术语/概念 描述
    database database 数据库
    table collection 数据库表/集合
    column field 数据库属性/字段(域)
    row document 数据记录行/文档
    index index 索引
    primary key primary key 主键,MongoDB默认自动将_id字段设置为主键,可以手动设置

    Mongodb数据库基本命令:

    查看当前数据库: db

    查看所有数据库名称,列出所有在物理上存在的数据库: show dbs

    切换数据库,如果数据库不存在也并不创建,直接插入数据或创建集合时数据库才创建:use 数据库名称

    删除当前数据库,如果数据库不存在,则什么也不做: db.dropDatabase()

    db.createCollection(name,options)   name是要创建的集合的名称,option是一个文档,选项参数是可选的,所以需要到指定的集合名称

    不限制集合大小:db.createCollection("stu")

    限制集合大小:

    capped:默认为false表示不设置上限,值为true表示设置上限

    参数size单位是字节,当capped为true时,才设置

    db.createCollection("stu",{capped:true,size:6142800})

    查看当前数据库的集合: show collections

    删除命令:db.stu.drop()

    MongoDB中常用的几种数据类型:

    ObjectID:文档ID

    String:字符串,最常用,必须是有效的UTF-8

    Boolean:存储一个布尔值,true或false

    Integer:整数可以是32位或64位,这取决于服务器

    Double:存储浮点值

    Arrays:数组或列表,多个值存储到一个键

    Null:存储Null值

    Timestamp:时间戳,表示从1970-1-1到现在的秒数

    Date:存储当前日期或时间的UNIX时间格式

    创建日期语句如下:注意参数的格式YYYY-MM-DD

    Date('2017-12-20')

    ObjectID:

    _id是一个12字节的十六进制数,保证每一份文件的唯一性:

    前4个字节为当前时间戳,之后3个字节的机器ID,接下来的2个字节MongoDB的服务进程id

    剩余3个字节是简单的增量值

    接下来的2个字节的MongoDB的服务进程id

    剩余3个字节是简单的增量值

    一个字节等于2位十六进制(一位十六进制的数等于四位二进制的数,一个字节等于8位二进制数)

    插入:如果不指定_id参数,MongoDB会为文档分配一个唯一的ObjectID

    方法一:db.stu.insert({name:'gj',gender:1)

    方法二:s1={_id:'20160101',name:'hr'}

        s1.gender=0

        db.stu.insert(s1)

    简单查询:db.集合名称.find()

    更新语法: db.集合名称.update(<query>,<update>,{multi:<boolean>})

    query:查询条件,类似sql语句update中的where

    update:更新操作符.类似sql语句update中的set部分

    multi:可选,默认为false,表示只更新找到的第一条记录,值为true表示把满足条件的文档全部更新

    全文档更新:db.stu.update({name:'hr'},{name:'nmc'})

    指定属性更新,通过操作$set

    db.stu.insert({name:'hr',gender:0})

    db.stu.update({name:'hr'},{$set:{name:'hys'}})

    修改多条匹配到的数据:

    db.stu.update({},{$set:{gender:0}},{multi:true})

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

    db.stu.save({_id:'20160102','name':'yk',gender:1})

    db.stu.save({_id:'20160102','name':'wyk'})

    删除:  db集合名称.remove(

     <query>,

    {

    justOne:<boolean>

    }

    )

    参数query:可选,删除的文档的条件

    参数justOne:可选,如果设为true或1,只删除一条,默认false,表示删除多条

    只删除匹配的第一条: db.stu.remove({gender:0},{justOne:true})

    全部删除:db.stu.remove({})

    创建示例数据:

    创建集合stu,文档的属性包含:_id,name,hometown,age,gender

    示例如下:

    db.stu.drop()

    db.stu.drop()
    db.stu.insert({_id : 1, name:'郭靖',hometown:'蒙古',age:20,gender:tr
    ue})
    db.stu.insert({_id : 2, name:'⻩蓉',hometown:'桃花岛',age:18,gender:
    false})
    db.stu.insert({_id : 3, name:'华筝',hometown:'蒙古',age:18,gender:fa
    lse})
    db.stu.insert({_id : 4, name:'⻩药师',hometown:'桃花岛',age:40,gende
    r:true})
    db.stu.insert({_id : 5, name:'段誉',hometown:'⼤理',age:16,gender:tr
    ue})
    db.stu.insert({_id : 6, name:'段王爷',hometown:'⼤理',age:45,gender:
    true})

    数据查询

    1.基本查询

    find():查询全部符合条件数据   db.集合名称.find({条件文档})

    db.stu.find({age:18})

    方法findOne():查询,只返回第一个

    db.集合名称.findOne({条件文档})

    db.stu.findOne({age:18})

    方法pretty():将结果格式化

    db.集合名称.find({条件文档}).pretty()

    db.stu.find({age:18}).pretty()

    比较运算符

    小于:$lt   小于或等于:$lte  大于:$gt   大于或等于:$gte 不等于 $ne

    查询年龄大于或等于18的学生: db.stu.find({$gte:18}})

    逻辑运算符

    默认是逻辑与的关系

    db.stu.find({age:{$gte:18},gender:true}

    逻辑或:使用or

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

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

    and和or一起使用

    查询大于18或性别为0的学生,并且学生的姓名为gj

    db.stu.find({$or:[{age:{$gt:18}},{gender:true}],name:'gj'})

    范围运算符

    使用$in,$nin 判断是否在某一个范围内

    查询年龄为18,28的学生

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

    支持正则表达式

    使用/ /或regex编写正则表达式

    查姓黄的学生

    db.stu.find({name:/^黄/})

    db.stu.find({name:{$regex:'^黄'}})

    自定义查询

    使用$where后面写一个函数,返回一个满足条件的数据

    查询年龄大于30的学生

    db.stu.find({$where:function(return this.age>30)})

    limit():用于指定数量的文档

    db.集合名称.find().limit(数值)  未指定参数则显示集合中的所有文档

    查询2条学生信息

    db.stu.find().limit(2)

    skip(): 用于跳过指定数量的文档

    db.集合名称.find().skip(数值) 默认是0

    查询从第3条学生开始查

    db.stu.find().skip(2)

    skip()和limit()可以一起使用,不分先后顺序

    创建数据集:

    for(i=0;i<15;i++){db.nums.insert({_id:i})}

    查询第5至8条数据

    db.nums.find().limit(4).skip(5)

    投影:

    在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段

    如:一个文档有5个字段,需要显示3个,投影其中3个字段即可

    语法:

    参数为字段与值,值1为显示,值为0不显示

    db.集合名称.find({},{字段名称:1,........})

    对于需要显示的字段,设置为1即可,不设置即为不显示

    对于_id列默认是显示的,如果不需要显示明确设置为0

    db.stu.find({},{name:1,gender:true})

    db.stu.find({},{_id:0,name:1,gender:true})

    排序:sort()用于对结果集进行排序

    db.集合名称.find().sort({字段:1,.....})

    参数为1为升序排列

    参数为-1为降序排列

    根据性别降序,,再根据年龄升序

    db.stu.find().sort({gender:-1,age:1})

    统计个数count()用于统计结果集中文档条数

    db.集合名称.find({条件}).count()

    也可以为:  db.stu.count({条件})

    db.stu.find({gender:1}).count()

    db.stu.count({age:{$gt:20}},gender:true})

    消除重复

    方法distinct()对数据进行去重

    db.集合名称.distinct('去重字段',{条件})

    db.stu.distinct('hometown',{age:{$gt:18}})

    聚合aggregate

    聚合主要用于计算数据,类似sql中的sum(),avg()

    语法:

    db.集合名称.aggregate([{管道:{表达式}}])

  • 相关阅读:
    1093. Count PAT's (25)
    1092. To Buy or Not to Buy (20)
    机器学习实战——k-邻近算法:约会网站
    1057. Stack (30)
    1017. Queueing at Bank (25)
    strcpy、strncpy和memcpy的用法比较
    华为笔试题--蛇形矩阵
    对于内核执行过程的理解
    pom.xml格式问题
    Json反序列化遇到的问题
  • 原文地址:https://www.cnblogs.com/zhouzetian/p/9614950.html
Copyright © 2011-2022 走看看