MongoDB第二篇
数据处理函数
db.collection.distinct(field)
功能 : 获取集合中某个域取值范围
e.g. 查看class0中age域的取值范围
db.class0.distinct('age')
pretty()
功能 : 将find查找结果格式化显示
limit(n)
功能:限制显示前n条文档
e.g. 显示查找结果前三条文档
db.class0.find({},{_id:0}).limit(3)
skip(n)
功能 : 跳过前n条文档,显示后面的文档内容
e.g. 跳过查找结果前3条文档,显示后面内容
db.class0.find({},{_id:0}).skip(3)
count()
功能:对查找结果计数统计
e.g.统计年龄等于17的文档(使用count query参数要写筛选条件)
db.class0.find({age:17},{_id:0}).count()
sort({field:1/-1})
功能:对查找结果按照指定的域排序显示
e.g. 按照年龄对查找结果升序排序(1 表示升序,-1表示降序)
db.class0.find({},{_id:0}).sort({age:1})
* 复合排序 : 对多个域进行排序,当第一排序项相同时,参考第二排序项排序,依次类推。
e.g. 当年龄相同时按照姓名升序排序
db.class0.find({},{_id:0}).sort({age:1,name:1})
函数可以连续调用
* 当一个函数的返回结果仍然是文档集合,可以继续调用函数
e.g. 查找年龄最大的三位同学文档信息
db.class0.find({},{_id:0}).sort({age:-1}).limit(3)
* 对筛选的文档集合,可以使用索引序号取某一项
e.g. 通过序列号 1 取到删选结果的第二项
db.class0.find({},{_id:0})[1]
删除文档
db.collection_name.deleteOne(query) #删除一条文档
db.collection_name.deleteMany(query) #删除多条文档
db.collection_name.remove(query,justOne)
功能:删除文档
参数:query 查询条件
justOne 默认为false此时remove用法同deleteMany
如果为true 此时remove用法同deleteOne
db.collection.findOneAndDelete(query) 有返回值 显示查找的内容
功能 : 查找某个文档并删除
参数 : query
返回 : 显示查找到的文档
e.g. 查找不存在sex域的文档并删除
db.class0.findOneAndDelete({sex:{$exists:false}})
更新文档
db.collection_name.updateOne(query,update,upsert)
功能 : 修改第一个符合条件的文档
参数 : query 筛选条件 用法同find
update 要修改的数据项,需要和修改操作符一同使用
upsert bool值 默认为false表示如果query没有筛选到文档,则不做任何操作
如果设置为true则如果没有筛选到文档会根据query update插入新的文档
e.g. 将年龄17的第一个文档修改为年龄18
db.class0.updateOne({age:17},{$set:{age:18}})
e.g. 如果query内容不存在则会插入新文档
db.class0.updateOne({name:'Jame'},{$set{age:18}},{upsert:true})
db.collection_name.updateMany(query,update,upsert)
功能:修改所有符合条件文档
参数: 参数用法同updateOne
e.g. 将年龄为17的所有文档修改为年龄20
db.class0.updateMany({age:17},{$set:{age:20}})
db.collection_name.update(query,update,upsert,multi)
功能:修改筛选文档
参数:query 筛选条件
update 修改内容
upsert 如果为true则如果query文档不存在可以插入新的文档
multi 默认为false 表示只能修改一条文档
设置为true 表示可以修改多条文档
e.g. 修改所有不存在sex域的文档年龄为20
db.class0.update({sex:{$exists:false}},{$set:{age:20}},false,true)
db.collection_name.findOneAndUpdate(query,update)
功能 : 查找一个文档并修改
参数 : query 查找条件
update 修改内容
返回 : 修改前的文档内容
e.g. 查找一个文档并修改年龄为17
db.class0.findOneAndUpdate({name:'Jame'},{$set:{age:17}})
db.collection_name.findOneAndReplace(query,docuemnt)
功能: 查找并替换一个文档
参数: query 查找条件
document 要替换的文档
返回:返回原有文档内容
e.g. 用新的文档替换查找到的文档
db.class0.findOneAndReplace({abc:123},{name:'Lily',age:19})
update 修改器的使用
db.collection.update(query,update,upsert,multi)
$set : 修改一个域的值,或者增加一个域
e.g. 当一个域不存在时可以增加一个域
db.class0.update({name:'Jame'},{$set:{sex:'m'}})
$unset : 删除一个域
e.g. 删除一个文档sex域
db.class0.update({name:'Tom'},{$unset:{sex:''}})
$rename : 修改一个域的域名
e.g. 修改sex域名为gender
db.class0.updateMany({},{$rename:{sex:'gender'}})
$setOnInsert : 当update插入文档时,作为补充插入内容
e.g. : 插入新的文档时,gender:'w' 也会作为文档的域
db.class0.update({name:'Lucy'},{$set:{age:20},$setOnInsert:{gender:'w'}},true)
$inc : 加法修改器
e.g. 所有人的age域值加1
db.class0.updateMany({},{$inc:{age:1}})
$mul : 乘法修改器
e.g. 将所有age域的值 乘以 0.5
db.class0.updateMany({},{$mul:{age:0.5}})
* $inc $mul 值可以是整数 小数,正数 负数
$max : 指定某个域的值如果小于规定值则改为规定值,大于规定值则不变
e.g. 如果Alex age小于18则改为18,大于18则不变
db.class0.update({name:'Alex'},{$max:{age:18}})
$min : 指定某个域的值如果大于规定值则改为规定值,小于规定值则不变
e.g. 如果lily age 大于20则改为20 小于20则不变
db.class0.update({name:'Lily'},{$min:{age:20}})
数组修改器
$push : 向数组中添加一项
e.g. 向score数组中增加5
db.class3.update({name:'小明'},{$push:{score:5}})
$pushAll : 向数组中增加多项
e.g. 向数组中添加多项内容
db.class3.update({name:'小红'},{$pushAll:{score:[10,5]}})
$pull : 从数组中删除某一个值(如果有重复值则都删除)
e.g. 删除score中所有的 5
db.class3.update({name:'小红'},{$pull:{score:5}})
$pullAll : 同时删除数组中多个值
e.g. 同时删除score中多个值
db.class3.update({name:'小红'},{$pullAll:{score:[82,10]}})
$pop : 弹出数组一项
e.g. 从数组中弹出一项 1表示最后一项 -1表示第一项
db.class3.update({name:'小亮'},{$pop:{score:-1}})
$addToSet : 向数组中添加一项,但是不能添加数组中已有数值
e.g. 如果score中没有88则添加,如果有则添加不上
db.class3.update({name:'小红'},{$addToSet:{score:88}})
$each : 对多个值进行逐一操作
e.g. 利用each同时添加90 10到数组
db.class3.update({name:'小明'},{$push:{score:{$each:[90,10]}}})
$position :指定位置插入数值 搭配each使用
e.g. 将91插入到数组的1号位置
db.class3.update({name:'小红'},{$push:{score:{$each:[91],$position:1}}})
$sort : 对数组进行排序 搭配each使用
e.g. 对数组进行升序排序
db.class3.update({name:'小亮'},{$push:{score:{$each:[],$sort:1}}})