1.增加数据
命令:
db.集合名.insert(document)
,插入一个文档
db.集合名.insertMany(data)
,插入多个文档
db.集合名.save(document)
, 插入或更改文档
use test3 # 切换数据库,不存在不会报错
db.stu.insert({name:'pan', gender: 'man'}) # 插入文档
db.stu.insert({_id:"20201108",name:"mei",num:18}) # 自定义_id值
db.stu.find({name:"pan"}) # 查看文档
data = [{name:"小明"},{age:18},{height:165.5}]
db.stu.insertMany(data) # 插入多条数据
db.stu.save({_id:'20201108', name:'ice'})
save()与insert()的区别:当主键已经存在,insert会报错,save则是更新数据
2.查询数据
命令:
db.集合名称.find({条件文档})
,返回所有符合条件的文档
db.集合名称.findOne({条件文档})
, 返回第一个符合条件的文档
db.集合名称.find({条件文档}).pretty()
返回格式化后的文档,不能与findOne()一起使用
先插入练习数据
db.stu.insert([{"name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true },
{"name" : "黄蓉", "hometown" : "桃花岛", "age" : 18, "gender" : false },
{"name" : "华筝", "hometown" : "蒙古", "age" : 18, "gender" : false },
{"name" : "黄药师", "hometown" : "桃花岛", "age" : 40, "gender" : true },
{"name" : "段誉", "hometown" : "大理", "age" : 16, "gender" : true },
{"name" : "段王爷", "hometown" : "大理", "age" : 45, "gender" : true },
{"name" : "洪七公", "hometown" : "桃花岛", "age" : 50, "gender" : true }])
查询数据
db.stu.find({}) # 查看所有文档
db.stu.find({gender:"male"})
db.stu.findOne({gender:"male"}) # 只返回第一个符合要求的文档
db.stu.find({gender:"male"}).pretty() # 格式化结果
3.更改数据
命令:db.集合名称.update({query}, {update}, {multi: boolean})
参数说明:
query:查询条件
update:更新操作符,默认更新是整个文档都更新,若想局部更新应该配合$set
multi:是否更新所有文档,默认是false
db.stu.find({hometown:"蒙古"}) # 先看一下原数据
db.stu.update({hometown:"蒙古"},{"name" : "郭靖", "hometown" : "蒙古", "age" : 22, "gender" : true}) # 只改了age,其他的都不改变
db.stu.find({hometown:"蒙古"}) # 查看变化
db.stu.update({hometown:"蒙古"},{"age" : 23}) # 只剩下"age",其他信息全部没有了
db.stu.find({hometown:"蒙古"}) # 根据这个查询条件已经找不到之前的那个记录了
db.stu.find({hometown:"蒙古"})
db.stu.update({hometown:"蒙古"},{$set:{"age":19}}) # 只改变指定字段,局部更新
db.stu.find({hometown:"蒙古"}) # 其他字段依然保留
db.stu.find({hometown:"大理"})
db.stu.update({hometown:"大理"},{$set:{hometown:"大理国","gender":false}},{multi:true}) # 批量局部更新
db.stu.find({hometown:"大理国"})
4.删除数据
命令:
db.集合名.remove({文档})
,删除文档
db.集合名.remove({})
,删除所有文档
db.stu.find({hometown:"桃花岛"})
db.stu.remove({hometown:"桃花岛"},{justOne:true}) # 只删除第一个hometown为桃花岛的文档
db.stu.remove({hometown:"桃花岛"}) # 删除所有hometown为桃花岛的文档
db.stu.remove({}) #删除全部文档
5.高级查询
5.1 比较运算符
$lt(小于)、$lte(小于等于)、$gt(大于)、$gte(大于等于)、$ne(不等于)
db.stu.find({age:18}) # 等于(默认)
db.stu.find({age:{$lt:18}}) # 小于18
db.stu.find({age:{$lte:18}}) # 小于等于18
db.stu.find({age:{$gt:18}}) # 大于18
db.stu.find({age:{$gte:18}}) # 大于等于18
db.stu.find({age:{$ne:18}}) # 不等于18
5.2 逻辑运算符
and
,逻辑与,用逗号分开即可
$or
,逻辑或,值为数组,元素为json
db.stu.find({age:{$lt:18},gender:true}) # age小于18并且gender为true
db.stu.find({$or:[{age:{$lt:18}},{gender:false}]}) # age小于18或者gender为false
5.3 范围运算符
$in(在), $nin(不在)
,在不在某个数组内
db.stu.find({age:{$in:[18, 40]}})
5.4 正则表达式
$regex
,编写正则表达式
# 查询name以'黄'开头的英雄
db.stu.find({name:{$regex:'^黄'}})
5.5 skip和limit
db.集合名.find().skip(NUMBER)
,跳过指定数量的文档
db.集合名.find().limit(NUMBER)
,限制读取文档的数量
# 查询前2条学生信息
db.stu.find().limit(2)
# 跳过前两条
db.stu.find().skip(2)
# 跳过2个并且只查询2个
db.stu.find().skip(2).limit(2)
5.6 排序
db.集合名称.find().sort({字段:1,...})
,参数1为升序,-1为降序
# 根据年龄降序
db.stu.find().sort({age:-1})
5.7 投影
db.集合名.find({},{字段名:1,...})
参数为字段与值,值为1表示显示, 值为0不显
_id列默认显示, 如果不显示则置为0
# id不显示,只显示name和age字段
db.stu.find({},{_id:0,name:1,age:1})
5.8 统计个数
db.集合名.find({条件}).count()
db.集合名.count({条件})
# 查询年龄为18岁的数据一共有多少条
db.stu.find({age:18}).count()
db.stu.count({age:18})