启动mongodb的客户端和服务端
- sudo service mongod start
- sudo mongod --config /etc/mongod.conf &
- mongo
mongodb中数据库和集合的命令
- 数据库不需要提前创建,插入数据的时候自动创建
- show dbs/show databases #查看所有的数据库
- use 数据库名 #使用数据库
- 数据库名.dropDatabase() #删除数据库
- 集合不需要提前创建,插入数据的时候自动创建
- show collections #查看所有的集合
- db.集合名.drop() #删除集合
- db.集合名.find() #集合的使用
insert和save的区别
insert插入,_id重复会报错
save 保存,_id存在会更行,不存在会插入
update
- db.col_name.update({条件},{name:1}) #会把满足条件的数据的第一条更新为{name:1}
- db.col_name.update({条件},{$set:{name:1}})
- 把满足条件的第一条的name值更新成1
- db.col_name.update({条件},{$set:{name:1}},{multi:true})
删除
- db.col_name.remove({条件},{justOne:flase}) #默认删除全部满足条件的内容
- db.col_name.remove({条件},{justOne:ture}) 删除一条满足条件的内容
比较运算符
⼩于:$lt (less than)
⼩于等于:$lte (less than equal)
⼤于:$gt (greater than)
⼤于等于:$gte
不等于:$ne
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" : 18, "gender" : true }])
例如:
查询年龄大于18的所有学生
db.stu.find({age:{$gte:18}})
逻辑运算符
- and : {name:"",age:""} 此时name和age表示and的逻辑
- or : {$or:[{条件1},{条件2}]} 条件1和2之前属于or关系
范围运算符
$in :在范围内 {age:{$in:[19,20,30]}}
- $nin :不在范围内
正则
db.products.insert([{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." },{ "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" },{ "_id" : 102, "sku" : "xyz456", "description" : "Many spaces before line" },{ "_id" : 103, "sku" : "xyz789", "description" : "Multiple\nline description" }])
投影
指定数据内容的字段 db.stu.find({条件},{name:1,_id:0})
返回数据中只会包含name字段,_id
不会显示
mongodb的分组
- 分组
db.stu.aggregate(
{$group:{_id:"$hometown",count:{$sum:1},total_age:{$sum:"$age"},avg_age:{$avg:"$age"}}}
)
_id
分组的依据$age
取age对应的值$sum:1
把每条数据作为1进行统计,统计的是个数$sum:"$age"
统计年龄对应的和$group
对应的字典中的键是输出数据的键- 不分组
db.stu.aggregate(
{$group:{_id:null,count:{$sum:1}}}
)
统计整个文档
- 数据透视把不同行的数据,放到一行来展示
db.stu.aggregate(
{$group:{_id:"$gender",name:{$push:"$name"},hometown:{$push:"$hometown"}}}
)
- 按照过个字段进行分组按照多个字端进行分组,
_id
的值是一个json
db.stu.aggregate(
{$group:{_id:{hometown:"$hometown",gender:"$gender"},count:{$sum:1}}}
)
多字段分组练习当某个键对应的值是字典的时候,取其中的值需要使用.操作,$_id.country
表示取到_id
这个字典下的country的键对应的值
db.tv3.aggregate(
{$group:{_id:{country:"$country",province:"$province",userid:"$userid"}}},
{$group:{_id:{country:"$_id.country",province:"$_id.province"},count:{$sum:1}}}
)
$project的使用
db.stu.aggregate(
{$group:{_id:"$hometown",count:{$sum:1}}},
{$project:{_id:0,sum:"$count",hometown:"$_id"}}
)
db.tv3.aggregate(
{$group:{_id:{country:"$country",province:"$province",userid:"$userid"}}},
{$group:{_id:{country:"$_id.country",province:"$_id.province"},count:{$sum:1}}},
{$project:{country:"$_id.country",province:"$_id.province",counter:"$count",_id:0}}
)
$skip $limit $sort
db.stu.aggregate(
{$group:{_id:"$hometown",count:{$sum:1}}},
{$sort:{count:-1}},
{$skip:1},
{$limit:2}
)
douban数据练习
db.tv1.aggregate(
{$project:{title:1,_id:0,count:"$rating.count",rate:"$rating.value",country:"$tv_category"}},
{$match:{rate:{$gte:8}}},
{$group:{_id:"$country",count:{$sum:1}}}
)