MongoDB学习

177 阅读3分钟

1.概念

是一个基于分布式文件存储的数据库,也是非关系型数据库,Nosql数据库(不支持数据库语言sql

2.结构

database 数据库
  collection 数据库表/集合
  document 数据记录行/文档
  filed 数据字段/域
  index 索引
  • mangoDB不支持表连接, primary key 主键,MongoDB自动将_id字段设置为主键
  • mysql > database > table > state / data
  • MongoDB > database > collection > document / data

3.命令

 1.查看数据库 show dbs <==> show databases
      新建的数据库,没有数据的时候不会展示。需要向其中插入数据
 2.切换数据库  use db_name 
      如果数据库不存在,则创建数据库,并切换到这个数据库,如果数据库存在就切换到指定数据库
 3. db 查看当前在那个数据库下
 4. db.dropDatabase() 删除当前使用数据库的方法 show dbs能显示的就能删除

4.集合的操作(collection)

    1.创建集合 db.createCollection(name : string,[options:object])
    2.查看集合 show collections === show tables
    3.删除集合 db.collection_name.drop();

不管集合也好 数据库都是一个容器罢了,后期使用语言操作的额是时候这两种操作将会被淡化

5.文档操作(document)

5.1 插入数据

       db.collection_name.insert({}) || db.collection_name.insert([{},{},{},{}])
 插入单行
       db.collection_name.insertOne()
 插入多行
       db.collection_name.insertMany([{},{},{},{}])

注意: mongoDB插入的内容会增加col 以多的那条决定结构

5.2 查看数据

       5.2.1 普通查看 db.collection_name.find()
       
       5.2.2 过滤查询 db.collection_name.find({})
       `> db.students.find({age:"18",gender:"女"})
     { "_id" : ObjectId("63bd267038097bd03477af40"), "name" : "张三", "age" : "18", "gender" : "女", "class" : "cdw101" }
     { "_id" : ObjectId("63bd278f38097bd03477af45"), "name" : "张奇迹", "age" : "18", "gender" : "女", "class" : "cdw102" }
     { "_id" : ObjectId("63bd289938097bd03477af47"), "name" : "李明星", "age" : "18", "gender" : "女", "class" : "cdw102" }  `      
        
        5.2.3 易读查询(有结构) db.collection_name.find({}).pretty()
         `db.students.find({name:"张三"}).pretty()
  {
    "_id" : ObjectId("63bd267038097bd03477af40"),
    "name" : "张三",
    "age" : "18",
    "gender" : "女",
    "class" : "cdw101"
}         `
       5.2.4 只读一条 db.collection_name.findOne()

5.3 更新数据

     db.collection_name.update({匹配条件},{$set:{修改的选项}})
     
 ` db.admins.update({name:"毛子韬"},{$set:{passwd:"1230"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })        `

加不加$set区别

加$set就是单纯的修改

不加就是用新的值覆盖所有原来的值(id不覆盖)

5.4 删除数据

     db.collection_name.remove({匹配条件})
  ` db.admins.remove({passwd:"1230"})
    WriteResult({ "nRemoved" : 1 })
  `

6.操作符

6.1 条件操作符

     $or    或关系
     $nor    或关系取反
     $gt    大于
     $gte    大于等于
     $lt    小于
     $lte    小于等于
     $ne    不等于
     $in    在多个值范围内
     $nin    不在多个值范围内
     $all    匹配数组中多个值
     $regex   正则,用于模糊查询
     $size   匹配数组大小
     $maxDistance 范围查询,距离(基于LBS)
     $mod    取模运算
     $near    邻域查询,查询附近的位置(基于LBS)
     $exists   字段是否存在
     $elemMatch 匹配内数组内的元素
     $within   范围查询(基于LBS)
     $box     范围查询,矩形范围(基于LBS)
     $center   范围醒询,圆形范围(基于LBS)
     $centerSphere 范围查询,球形范围(基于LBS)
     $slice    查询字段集合中的元素(比如从第几个之后,第N到第M个元素

db.girls.find({age:{lt:30},money:{gte:8000}})

6.2 过滤操作符

       and => ,

      or => $or => [{},{}]
      
      db.students.find({$or:[{age:{$lt:20}},{gender:"女"}]}).pretty()
      
      db.students.find().limit(pageSize).skip((index-1)*pageSize)
      
      正则
      
      db.students.find({passwd:{$regex:"^[0-9a-z]{6,10}$",$options:"$i"}})
      
      db.students.find({passwd:{$regex:/^[0-9a-z]{6,10}$/i}})

7.聚合

   db.students.aggregate(options)
   
   options:
           $sum $avg $min $max $push $addToSet $first $last
   例子:
     `db.students.aggregate([{$group:{_id : "$age", age : {$sum : 1}}}])
 { "_id" : 19, "age" : 1 }
 { "_id" : 22, "age" : 2 }
 { "_id" : 21, "age" : 3 }
 { "_id" : 17, "age" : 1 }
 { "_id" : 18, "age" : 2 }
 { "_id" : 20, "age" : 1 }
 { "_id" : null, "age" : 1 } `

MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似 SQL 语句中的 count(*)。

注意:使用时需要保证是数值

8.关系

 嵌入式和引用式
  1 : 1 你跟你的身份证号

  1 : n 你跟你的手机

  n : m 闸机与乘客的关系
  
  
  学生在第几宿舍 存宿舍的_id ObjectId(adsadsad)

1.需要得到学生中的班级id 需要得到的是对象 只能用 findOne 可以用变量接收

var result = db.students.findOne({},{_id:0,class:1})

2.通过第一部的结果作为我第二次查询的条件 他在班级当中的信息

db.class.find({_id:{$in:result[class]}})

案例

   var result = db.students.findOne({name:"张三"},{_id:0,class:1})
   db.class.find({_id:{$in:result[class]}})