了解mongodb,之前没用过nosql类型来做数据库,只用过redis之类的做功能,今天先简单学习一波mongodb的操作
MongoDB 将数据存储在灵活的,类似JSON的文档中,这意味着字段可能因文档而异,并且数据结构可以随时间变化
之前数据库都是用关系型数据库,学这个感觉思想都“升华”了哈哈,介绍还是看官网的好~移步官网mongodb介绍
这波学习的主要是基础命令,然后还有聚合函数,果然一句SQL都没有OAO
接下来就是贴操作!
0.基础命令
1) 数据库命令
创建/切换 use 数据库名
显示所有数据库 show dbs
显示当前数据库 db
删除数据库 db.dropDatabase()
* 2) 集合命令
创建 db.createCollection(集合名)
显示集合列表 show collections/tables
删除集合 db.集合名.drop()
3) 文档命令
增加文档 db.集合名.insert(数据)
* 修改 db.集合名.update({查询条件},{修改的目标}) 将指定的文档全部改成指定的值 db.rtus.update({"worktime":NaN},{$set:{"worktime":0.1}});
db.集合名.update({查询条件},{$set:{"键名":"新的值"}}) 只修改指定键名的值
删除 db.集合名.remove({查询条件})
1.高级命令
$gt 大于
db.集合名.find({"键名":{$gt:值}})
$lt 小于
db.集合名.find({"键名":{$lt:值}})
$gte 大于等于
db.集合名.find({"键名":{$gte:值}})
$lte 小于等于
db.集合名.find({"键名":{$lte:值}})
$ne 不等于
db.集合名.find({"键名":{$ne:值}})
区间查询
db.集合名.find({"键名":{$gt:值,$lt:值}})
* $in 在集合中
db.集合名.find({"键名":{$in:[值]}}) $in后面是 array []
$nin 不在集合中
db.集合名.find({"键名":{$nin:[值]}}) $nin后面是 array []
$size 值的个数
db.集合名.find({"键名":{$size:个数}})
$exists 是否存在某个键名
db.集合名.find({"键名":{$exists:true|false}})
示例 db.man.find({"address":{$exists:false}})
* $or 或者,多个条件满足一个就可以
db.集合名.find({$or:[条件1,条件2,……}])
示例 db.man.find({$or:[{"name":"qiqi"},{"age":18}]})
* 模糊查询,值是正则表达式
db.集合名.find({})
示例 db.man.find({"name":/q/})
* 格式化查询
db.集合名.find({}).pretty()
示例 db.man.find({"name":/q/}).pretty()
*2.排序
db.集合名.find({}).sort({"键名1":1,"键名2",-1});
1 升序
-1 降序
示例 db.man.find({}).sort({"age":1});
*3.限制输出
1)limit(n) 限制输出n条
db.集合名.find().limit(n);
示例 年龄升序前三条
db.man.find({}).sort({"age":1}).limit(3);
2) skip(n) 跳过n条输出
db.集合名.find().skip(n);
示例 跳过3条输出2条
db.man.find({}).sort({"age":1}).skip(3).limit(2);
2个组合常用于分页,skip 优先级比 limit 高
4.聚合函数(aggregate
1) 核心语法:
db.集合名.aggregate([
{管道1:{表达式}},
{管道2:{表达式}},
{管道3:{表达式}}
]);
2)$group 分组
db.集合名.aggregate(
{$group:
{
_id:'$字段名',
别名:{聚合函数:'$字段名'}
}
}
);
示例:统计每个年龄段的总人数
db.man.aggregate(
{$group:
{
_id:'$age',
count:{$sum:1}
}
}
);
示例:统计每个年龄段的人数名单
db.man.aggregate(
{$group:
{
_id:'$age',
count:{$sum:1},
名单:{$push:'$name'} $push:把每一组数据拼接成一个数组
}
}
);
3) match 管道,匹配条件
db.集合名.aggregate({
$match:{"键名":{$gt:18}}
});
示例:
age等于19的人
db.man.aggregate({
$match:{"age":19}
});
统计每个年龄段的人数名单
db.man.aggregate([
{$match:{"age":19}},
{$group:
{
_id:'$age',
count:{$sum:1},
名单:{$push:'$name'}
}
},
$sort:{age:1}
]);
4) $project 管道,限定输出字段
db.集合名.aggregate({
$project:{
name: 1|0 //1显示,0不显示
}
});
示例:
只显示名字和年龄
db.man.aggregate({
$project:{_id:0,age:1,name:1} //_id不写默认显示,其他不写默认不显示
});
5) $sort 排序,$skip 跳过 ,$limit 限制输出
db.集合名.aggregate({
$sort:{
'name': 1|-1
}
});
db.集合名.aggregate({
$skip:n
});
db.集合名.aggregate(
{$limit:n} 限制输出n条
);
示例:
db.man.aggregate(
{$limit:3}
);
示例:
db.man.aggregate([
{$group:
{
_id:'$age',
count:{$sum:1},
名单:{$push:'$name'}
}
},
{$sort:{'age':1}},
{$skip:2},
{$limit:3}
]);
6) $unwind 管道,将数组字段进行拆分,每个值为每一条数据
db.集合名.aggregate({
$unwind:'键名'
});
示例:
db.man.aggregate({
$unwind:'$interset'
});