MongoDB(2)- MongoDB的基本操作
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.创建索引的原则
- 数据量很大的集合必须创建索引,相反则不需要创建索引
- 集合的数据读取多过写入,则需要创建索引
- 给经常被当作查询条件的字段设置索引