gltou

1.MongoDB的数据结构

1.1.数据结构

1.2.管理逻辑库

// 创建/切换逻辑库
use test
db.student.save({name:"lisi",age:25})

// 查看逻辑库
show dbs

// 删除逻辑库
use test    //先进入要删除的逻辑库,再执行删除命令
db.dropDatabase()    //执行删除命令

同样也可以通过图形界面完成上述操作

1.3.管理集合

实例:创建集合

实例:查看集合

 

实例:删除集合

实例:查看集合记录数量/查看数据空间容量

 实例:重命名集合

1.3.1.集合添加记录

use school
db.student.save([
    {name:"李强",sex:"",birthday:"2019-10-22",class:"5-1",city:"北京"},
    {name:"刘娜",sex:"",birthday:"2019-04-16",class:"5-2",city:"大连市"},
    {name:"陈浩",sex:"",birthday:"2019-08-21",class:"5-1",city:"苏州市"},
    {name:"赵婷婷",sex:"",birthday:"2019-05-13",class:"5-1",city:"北京"},
])

 

 

2.MongoDB的主键机制

2.1.主键值

2.2.时间戳

主键ID是一个时间戳,时间戳事格林尼治时区,比北京东八区晚了8个小时,后面JS笔记中会介绍将该时间戳转换成北京时间

 

3.MongoDB的查询操作

3.1.查询find

use school
db.student.find()    //查询student集合所有记录
db.student.find({name:"李强"})   //查询student集合中,name为李强的记录    
db.student.find({sex:"male",age:{$gte:20}})   //查询student集合中,sex为male并且age大于等于20的记录
db.student.findOne()    //返回集合中一条记录

3.2.查询表达式

示例

//年龄大于等于20,小于等于30的记录
db.student.find({
    age:{$gte:20,$lte:30}
})
//city在大连或者苏州的记录
db.student.find({
    city:{$in:["苏州市","大连市"]}
})

示例

use school

//查询身份是班主任和年级主任的教师
// db.teacher.save({name:"Jack",role:["班主任","年级主任","副校长"]})
// db.teacher.find({role:{$all:["班主任","年级主任"]}})

//查询年龄不在28-30岁之间的学生
/*
db.student.find({
    age:{$not:{$gte:28,$lte:30}}
})
*/

//查询30岁以下的男学生,或者25岁以下的女学生
// db.student.find({$or:[{age:{$lt:30},sex:"男"},{age:{$lt:25},sex:"女"}]})

//查询含有age字段的学生
db.student.find({age:{$exists:1}})

3.3.正则表达式

参考资料:http://c.biancheng.net/mongodb2/regex.html

3.4.分页

#取10条记录
limit(10)

#从第20条开始,取10条记录
skip(20).limit(10)

3.5.排序

3.6.去重

  • distinct返回的是js的数组
  • 对返回的数据进行排序,使用js的sort方法加匿名函数:sort(function(){return -1});-1升序,1降序
  • 返回某一个区间的结果,使用slice()方法,slice(0,5)取前5条记录

4.MongoDB修改与删除操作

4.1.修改记录操作

4.1.1.修改添加属性内容

update({condition},{$set:{data}});updateMany({condition},{$set:{data}})

  • updata,updateMany:当存在多个符合条件的记录时update()只修改第一条记录,updatemany()会将所有的都修改掉
  • condition:要修改的记录,即筛选条件,不能没有,可以为空;为空时即修改所有记录
  • $set表达式:添加修改记录属性,即筛选出来的结果,如果没有{data}的属性,就执行添加属性操作;如果有就执行修改操作
  • {data}:要修改的内容 

实例:

4.1.2.删除记录字段;字段值加法运算

updateMany({},{$unset:{data}});update({},{$unset:{data}})

  • updata,updateMany:当存在多个符合条件的记录时update()只修改第一条记录,updatemany()会将所有的都修改掉
  • {}:为空即删除所有记录data中为1的属性;需要筛选删除,添加条件即可
  • $unset表达式:删除记录属性
  • {data}:删除记录的哪些属性,图示"city:1,tel:1"中的1代表是否删除的意思,删除为1

updateMany({},{$inc:{data}});update({},{$inc:{data}})

  • updata,updateMany:当存在多个符合条件的记录时update()只修改第一条记录,updatemany()会将所有的都修改掉
  • {}:为空即所有记录中data中的属性进行加法运算;需要筛选记录进行属性加法运算,添加条件即可
  • $inc表达式:对某个字段值做加法运算
  • {data}:进行加法运算的属性

4.1.3.数组属性添加/删除元素

updateMany({},{$push:{data}});update({},{$push:{data}})

updateMany({},{$pull:{data}});update({},{$pull:{data}})

  • updata,updateMany:当存在多个符合条件的记录时update()只修改第一条记录,updatemany()会将所有的都修改掉
  • {},{data}意义同上
  • $push表达式:数组属性添加元素
  • $pull表达式删除数组属性的元素

4.2.删除记录操作

  • 使用上相当于find,找到符合条件记录,删除
  • 当find()函数传入空集合时,代表删除所有记录

5.MongoDB的索引机制

5.1.创建/删除/查看索引

 

  • createIndex({name:1}):创建索引,索引字段为name,按升序排序;阻塞形式创建索引,不建议使用这种方法创建索引
  • createIndex({name:1},{background:true,name:"name_index"}):
    • 创建索引,索引字段为name,按升序排序;在数据库空闲的时候创建,创建索引建议添加background参数
    • name:"name_index"   索引名称为name_index;这个name属性为可选,不添加时,索引名称默认为字段名称
  • dropIndexes():删除所有索引
  • dropIndex("name"):删除具体某一个索引,该命令为删除name这个索引
  • getIndexes():查看集合有哪些索引,以及索引的详细信息

5.2.唯一性索引

  • 创建唯一性索引的前置条件就是:集合中所有的记录都得有这个字段,这个字段才能具备创建唯一性索引的条件
  • 使用属性unique:true来声明创建的这个索引为唯一性索引
  • 唯一性索引的这个字段值不能重复

5.3.创建索引的原则

  • 数据量很大的集合必须创建索引,相反则不需要创建索引
  • 集合的数据读取多过写入,则需要创建索引
  • 给经常被当作查询条件的字段设置索引

 

相关文章: