mongodb小啾速通复习笔记(防遗忘版)
part1
1.1 启动mongodb
mongo
1.2 查看所有数据库、集合
show dbs
# 使用数据库test,如果不存在,则会创建出该数据库
use test
# 查看当前数据库中的集合
show tables
1.3 在集合collection001中插入数据
插入一条、多条。任意条。
db.collection001.insertOne({name:"aaa"})
db.collection001.insertMany({name:"bbb",age:"18"})
db.collection001.insert({name:"ccc",age:"18",type:"A"})
db.collection002.insertMany([{name:"Tom", city:"cityA",type:"aaa",num:609},
{name:"allen",city:"cityC",type:"bbb",num:549},
{name:"jerry",city:"cityA",type:"bbb",num:593},
{name:"frank",city:"cityB",type:"aaa",num:657},
{name:"jack",city:"cityC",type:"aaa",num:620},
{name:"alice",city:"cityB", type:"ccc",num:584},
{name:"marry",city:"cityA",type:"bbb",num:599}])
1.4 删除当前数据库
db.dropDatabase()
part2
2.1 查询集合collection001中的一条、所有数据
db.collection002.findOne()
db.collection001.find()
2.2 条件查询
# 查询所有A值为A的数据
db.collection002.find({A:“a”})
db.collection002.find({A:{$eq:“a”}})
#查询num大于600的数据
db.collection002.find({num:{$gt:600}})
# 查询num大于500 且 小于600 的数据
db.collection002.find({num:{$lt:600,$gt:550}})
# 查询city取值在 目标列表中的数据
db.collection002.find({city:{$in:[“cityA”,“cityC”]}})
# 查询 city 在 目标列表中 且 num大于600 的数据
db.collection002.find({$and:[{city:{$in:[“cityA”,“cityC”]}},{num:{$gt:600}}]})
# 查询结果格式化展示(更好看)
db.collection002.find().pretty()
# 查询到数据的数量
db.collection002.find().count()
# 数量限制 取出前两条数据
db.collection002.find().limit(2)
# 跳过前两个数据
db.collection002.find().skip(2)
# 排序,升序
db.collection002.find().sort({num:1})
# 排序,降序
db.collection002.find().sort({num:-1})
2.3 映射
"_id"字段是默认取出的。字段name后边写为1(只要不为0),表示取出该字段。如果写为0,则表示不取该值。 还有一个重要的规则是,对于除了_id外的其他字段,使用映射时0和1不可以共存,否则会报错。 如只有1时,则取出标记为1的字段。只有0时,则取除了这些为0的字段之外的字段。
# 映射 1 和0 不可以共存,1表示需要该字段,0表示不需要该字段
db.collection002.find({num:{$gt:550}},{name:1})
Part3. 更新/删除 数据
3.1 更新一整条数据
更新一整条数据: 将name为tom的数据,改为{name:“jim”,num:666}
db.collection002.update({name:"Tom"},{name:"jim",num:666})
更新一条数据中的部分字段
更新一条数据中的部分字段:将name为alice的数据,中的字段name改为lucy。该数据的其他字段不变。
db.collection002.update({name:"alice"},{$set:{name:"lucy"}})
批量更新 {multi:true}
将所有字段city值为cityA的数据,的city字段的值改为cityxxx
db.collection002.update({city:"cityA"},{$set:{city:"cityXXX"}},{multi:true})
有则修改,无则插入
db.collection002.update({type:"eee"},{type:"aaa"},{upsert:true})
增量修改 $inc
将name为lucy的字段的num增加20。或减小5。
db.collection002.update({name:"lucy"},{$inc:{num:20}})
db.collection002.update({name:"lucy"},{$inc:{num:-5}})
3.2 删除数据
删除字段type值为bbb的数据
db.collection002.remove({type:"bbb"})
删除字段type值为ddd的第一条数据
db.collection002.remove({type:"ddd"},{justOne:true})
删除目标集合中的所有数据
db.collection002.remove({})
删除目标集合
db.collection002.drop()
Part4 聚合
db.data.insertMany([{name:"Tom", city:"cityA",type:"aaa",num:609,age:18},
{name : "allen", city :"cityC", type: "bbb", num : 549,age:20},
{name :"jerry", city :"cityA", type :"bbb", num : 593,age:22},
{name :"frank", city : "cityB", type:"aaa", num : 657,age:21},
{name :"jack", city : "cityC", type:"aaa", num : 620,age:18},
{name :"alice", city : "cityB", type:"ccc", num : 584,age:20},
{name :"marry", city:"cityA", type:"bbb", num : 599,age:22}
])
$group
对city分组,并求每组num的平均值。
db.data.aggregate({$group:{_id:'$city',avg_num:{$avg:'$num'}}})
对city分组,并求每组num、age的平均值。
db.data.aggregate({$group:{_id:'$city',avg_num:{$avg:'$num'},avg_age:{$avg:'$age'}}})
$match 过滤管道
可以将其作用结果传给后一个管道。
对city不是"cityC"的city分组(过滤掉“”cityC"),并求每组num的平均值。
db.data.aggregate({$match:{city:{$ne:"cityC"}}},{$group:{_id:'$city',avg_num:{$avg:'$num'}}})
对age≥20的city分组(过滤掉“”cityC"),并求每组num的平均值。
db.data.aggregate({$match:{age:{$gte:20}}},{$group:{_id:'$city',avg_num:{$avg:'$num'}}})
统计每组个数
db.data.aggregate({$group:{_id:'$city',count:{$sum:1}}})
$project 映射管道
db.data.aggregate({$group:{_id:'$city',avg_num:{$avg:'$num'},avg_age:{$avg:'$age'}}},{$project:{avg_num:1}})
$sort $skip $limit
按年龄降序排列,跳过第一条,取前三条数据
按年龄降序排列,取前三条数据,跳过第一条
取前三个数据,跳过第一个,再降序排列
db.data.aggregate({$sort:{age:-1}},{$skip:1},{$limit:3})
db.data.aggregate({$sort:{age:-1}},{$limit:3},{$skip:1})
db.data.aggregate({$limit:3},{$skip:1},{$sort:{age:-1}})
|