学习主题:MongoDb
学习目标:
- 掌握mongodb文档的更新
- 掌握mongodb文档的删除
- 掌握mongodb文档的查找
- 掌握mongodb文档的条件操作符
- 掌握mongodb中的索引操作
- Mongodb的更新方式
- Update()函数更新
- Save()函数更新
Mongodb的update更新?
Update用于更新已存在的文档(只更新更新内容中数据,文档数据易丢失)
语法格式:db.COLLECTION_NAME.update({查询条件},{更新内容},{更新参数(可选)})
Mongodb的更新操作符有哪些 都是什么意思?
$set (指定一个键,并更新键值,若不存在则创建)
db.dev.update({title:'语文小组'},{$set:{title:'物理小组'}})
使用multi参数实现批量更新操作
db.dev.update({title:'dev'},{$set:{size:'500'}},{multi:true})
$inc(数值类型):可以对文档的某个值为数值型(只能为满足要求的数字)的键进行增减操作
$unset 删除键
$push (数组类型的键)
db.dev.update({title:'dev'},{$push:{tags:'JAVA 大数据 AI'}})
$pop:(删除数据元素)
db.dev.update({title:'abc'},{$pop:{tags:1}}) //1表示从尾删
db.dev.update({title:'abc'},{$pop:{tags:-1}} //-1表示从头删
$pull 从数组中删除满足条件的元素
db.dev.update({title:'abc'},{$pull:{tags:'34'}})
$pullAll 从数据中删除满足条件的多个元素
$rename 对键重新命名
Mongodb的save()更新?
Save()方法通过传入的文档来替换已有文档
语法格式:save({文档})
例如:修改title并删除tag数组
db.dev.save({"_id" : ObjectId("5dbd292c503ed06c738dc15b"),title:'def'})
Mongodb删除文档的三种方式?
根据主键删除文档
db.dev.remove({"_id" : ObjectId("5dbd292c503ed06c738dc15b")})
如果使用的条件在集合中可以匹配多条数据,那么remove函数会删除所以满足条件的数据
db.dev.remove({title:"dev"},1)
Db.repairDatabase()回收磁盘空间(需要管理员账户)
DeleteOne()函数删除一条文档
DeleteMany()函数删除多条文档
删除集合中的所有文档
Remove({})
deleteMany({})
Mongodb如何实对文档的查询,请举例说明?
使用find()函数查询文档
Find({查询条件},{指定投影的键})
使用pretty()函数格式化显示
FindOne({查询条件},{指定投影的键}) 自带格式化显示
db.dev.find({title:/a/}) //查询标题含有a内容
db.dev.find({title:/^a/}) //查询以a开头
db.dev.find({title:/a$/})//查询以a结尾
Mongodb中的投影操作指的是?
投影键显示该列查询的结果
语法格式为:find({查询条件},{投影键名:1(显示该列)|0(不显示该列)})
db.dev.find({title:"dev"},{title:1})
条件运算符有哪些 分别什么意思?
$gt 大于
db.dev.find({size:{$gt:300}})
$lt 小于
db.dev.find({size:{$lt:300}})
$gte 大于等于
$lte 小于等于
$eq 等于
$ne 不等于
$and 并且
db.dev.find({$and:[{size:{$gt:100}},{size:{$lt:400}}]})
$or 或者
db.dev.find({$or:[{title:{$eq:'test2'}},{size:{$gt:300}}]})
$type 类型检索数据
db.dev.find({title:{$type:'number'}})
and和or如何联合使用?
db.dev.find({$or:[{$and:[{title:{$eq:'test5'}},{size:500}]},{size:{$lt:400}}]})
每页显示5条查看第5页的数据如何实现?
db.dev.find({},{title:1,_id:0}).skip(5).limit(5)
如何实现排序,两个条件如何排序 如年龄一致按照分数排序?
db.dev.find({size:{$type:'number'}},{title:1,size:1,_id:0}).sort({size:1})
如何创建索引?
db.dec.createIndex({title:1},{background:true})
如何查看索引?
db.dev.getIndexes()
db.dev.getIndexSpecs()
db.dev.getIndexKeys()
删除索引有几种方式,分别举例说明?
删除全部索引
db.dev.dropIndexes()
删除指定索引
db.dev.dropIndex(‘title_1’)
索引类型有哪些,有何作用?
单字段索引 在索引中只包含一个键,查询时,可加速对该字段的各种查询请求
交叉索引 一个集合的多个字段分别建立索引,在查询的时候通过多个字段作为查询条件。
复合索引 针对多个字段联合创建索引,满足多字段组合查询,也满足匹配符合索引前缀的查询
多key索引 多key索引会为数组的每个元素建立一条索引
文本索引
部分索引
db.dev.createIndex({size:1},{partialFilterExpression:{size:{$gt:300}}})
使用索引需要注意什么?
创建索引需要在管理员admin数据库下进行操作,不能有重复字段,出现重复字段则不能创建就会报错。
索引额外属性
db.dev.createIndex({title:1},{background:true,unique:true})
索引限制指的是?
额外开销:每个索引占据一定的存储空间,在进行插入,更新和删除操作时也需要对索引进行操作。所以,如果你很少对集合进行读取操作,建议不使用索引
内存(RAM)使用 由于索引是存储在内存(RAM)中,你应该确保该索引的大小不超过内存的限制。
如果索引的大小大于内存的限制,MongoDB会删除一些索引,这将导致性能下降
查询限制
索引不能被以下的查询使用:
正则表达式及非操作符,如 $nin, $not, 等。
算术运算符,如 $mod, 等。
$where 子句
所以,检测你的语句是否使用索引是一个好的习惯,可以用explain来查看。
索引键限制
插入文档超过索引键限制
如果文档的索引字段值超过了索引键的限制,MongoDB不会将任何文档转换成索引的集合。与mongorestore和mongoimport工具类似。
最大范围
集合中索引不能超过64个
索引名的长度不能超过128个字符
一个复合索引最多可以有31个字段