MongoDB__lzy

MongoDB

1.mongodb概述

1.1MongoDB优点

  • 易扩展
  • 大数据量
  • 灵活的数据模型

1.2MongoDB缺点

  • 数据重复存储

1.3MongoDB概念

  • MongoDB三要素
    • 数据库
    • 集合(表)
    • 文档(记录)
  • MongoDB中的数据存储是以Bson的形式存储的,Bson是二进制的json,所以看上去记录的形式类似于json数据

1.4MongoDB中数据类型

  • object ID: 文档ID
  • String
  • Boolean
  • Integer
  • Double
  • Arrays
  • Object
  • Null
  • Timestamp
  • Date

2.基本命令

2.1操作数据库命令

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

2.2操作集合命令

  • db.createCollection(name,iptions) 创建集合
  • show collctions 查看集合
  • db.collection_name.drop() 删除集合

2.3增删改查

    • db.stu.insert({_id:"20190803",name:"lizeyuan",gender:1})
    • 插⼊⽂档时, 如果不指定_id参数, MongoDB会为⽂档分配⼀个唯⼀的ObjectId类型的_id
  • 保存
    • db.stu.save(document) 如果文档_id已经存在则修改,否则添加新的文档
    • insert如果文旦存在直接报错
  • 更新
    • db.集合名称.update({query},{update},{multi:})
      • query: 查询条件
      • update: 更新内容,{$set:{update}}加set表示只更新该字段,否则没有更新的字段丢弃
      • multi: 为true表示更新全部
  • 删除
    • db.集合名称.remove({query},{justOne:})
      • query: 查询条件
      • justOne: 为true表示删除一条,为false表示删除多条

3.高级查询

3.1find()查询

  • db.stu.find({gender:false}) 查询所有的女生
  • db.stu.findOne({gender:false}) 查询一个女生
  • db.stu.find({gender:false}).pretty()查询所有的女生并格式化显示

3.2比较运算符

  • $lt: 小于
    • 如:db.stu.find({age:{$lt: 18}}) 查询年龄小于18的学生
  • $lte: 小于等于
  • $gt: 大于
  • $gte: 大于等于
  • $ne: 不等于

3.3逻辑运算符

  • and: 并
  • $or: 或
    • db.stu.find({$or:[{age:{$gt:18}}, {gender:false}]}) 查询年龄大于18,或性别为false的学生
  • $in: 判断在某个范围
    • db.stu.find({age:{$in:[18,20]}}) 查询年龄为18或为20的学生
  • $nin: 判断不在某个范围

3.4正则表达式

  • $regex: 编写正则表达式
    • db.stu.find({name:{$regex:"^黄"}}) 查询姓黄的学生

3.5limit和skip

  • limit(): 查询指定数量的文档
    • db.集合名称.find().limit(number)
  • skip(): 跳过指定数量的文档
    • db.集合名称.find().skip(number)

3.6投影(选择性返回查询结果)

  • 语法:db.集合名称.find({query}, {字段名称:1, 字段名称:0})
    • 1表示显示该字段,0或不写表示不显示

3.7排序sort()

  • 语法:db.集合名称.find({query}).sort({字段1:1, 字段2:-1})
    • 1表示升序
    • -1表示降序

3.8统计个数count()

  • 语法
    • db.集合名称.find({query}).count()
    • db.集合名称.count({条件})

3.9消除重复

  • 语法:db.集合名称.distinct("去重字段",{query})
  • 如:db.stu.distinct("hemotown",{age:{$gt:20}}) 查询年龄大于20的学生的家乡,去重;返回列表

4.聚合与管道

4.1聚合aggregate()

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

  • 上一个管道的输出结果作为下一个管道的输入

  • 常用管道

    • $group:将集合中的文档分组,可用于统计结果
    • $match:过滤数据,输出符合条件的文档
    • $project:修改文档结构,如重命名、增加删除字段、创建计算结果
    • $sort:将输入文档排序后输出
    • $limit:限制输出文档的个数
    • $skip:跳过指定数量的文档,并返回剩下的文档
    • $unwind:将数组类型的字段进行拆分
  • 常见表达式

    • $sum:求和,1表示以一倍计数
    • $avg:求平均值
    • $min:求最小值
    • $max:求最大值
    • $push:在结果文档中插入值到一个数组中
    • $first:根据资源文档的排序获取第一个文档数据
    • $last:根据资源文档的排序获取最后一个文档数据

4.2$group分组管道命令

  • 如;

    db.stu.aggregate(
        {$group:
            {
                _id:"$gender",
                counter:{$sum:1}
            }
        }
    )
    
    • _id 为分组依据,值为null表示统计整个文档

4.3$match过滤管道命令

  • 如:查询年龄大于20的男女学生的人数

    db.stu.aggregate(
         {$match:{age:{$gt:20}}
         {$group:{_id:"$gender",counter:{$sum:1}}}
         )
    
    • find()虽然也有过滤功能,但不能在管道中使用

4.4$project修改文档输出结构

  • 如:查询男女生人生,输出人数

    db.stu.aggregate(
         {$group:{_id:"$gender",counter:{$sum:1}}}
         {$project:{_id:0,counter:1}}
         )
    

4.5$sort排序管道命令

  • 如:查询男女人数,按照人数降序

    db.stu.aggregate(
         {$group:{_id:"$gender",counter:{$sum:1}}},
         {$sort:{counter:-1}}
     )
    

4.6$skip和$limit

  • 如:统计男女生人数,按照人数升序,返回第二条数

    db.stu.aggregate(
         {$group:{_id:"$gender",counter:{$sum:1}}},
         {$sort:{counter:-1}},
         {$skip:1},
         {$limit:1}
     )
    

5.索引

  • 建立索引db.集合.ensureIndex({属性:1})
    • 1表示升序
    • -1表示降序
  • 建立唯一索引db.集合.ensureIndex({属性:1},{unique:true})
  • 建立联合索引db.集合.ensureIndex({字段1:1,字典2:1})
  • 查看当前集合的所有索引db.集合.getIndexes()
  • 删除索引db.集合.dropIndex({索引字段:1})

你可能感兴趣的:(MongoDB__lzy)