一 MongoDB的安装与环境配置
mongoDB是一个文档型数据库,存储的是key:value ,类似json数据 。分布式 、高性能的数据库。
- 去官网下载MongoDB安装包,解压后配置环境变量;
- 去找安装好的你的mongodb目录里面bin文件,把路径配置到系统环境变量path上;
- 最后启动mongodb服务器 :在cmd里面输入mongo ,回车 就进入mongodb数据库了 ;
- 最后重新打开一个cmd,输入mongo就与MongoDB数据库连接了;注意:第一个cmd不可以关闭
二 命令
- mongoDB怎样创建数据库
use chat ;
会去检测chat数据库是否存在 。若不存在 : 创建+定位 ;存在直接定位;
2. 查看里面的所有数据库
show dbs;
显示所有的数据库 ,但是里面可能不存在你创建的数据库,原因是你的数据库里面什么数据都没有。要想显示创建的数据库 , 得向数据库添加数据:
db.chat.insert({"name":"张三"});
show dbs; //显示你创建的数据库
- 删除数据库
db.dropDatabase();
删完之后会显示: ok:1;
4. 创建集合:collection。 集合类似mysql的表 只不过存储的是文档json。
db.createCollection(name,options);
name :创建的集合名称 ; options:设置当前集合的相关属性 , 可选;
5. 删除集合
db.collection.drop(); //db.user.drop(); true 删除成功
- 显示集合
show collections;
- 插入文档
db.user.insert({name:"",sex:"",age:""});
eg:
db.user.insert({name:"张三",age:20,sex:"男",hobby:["篮球","足球","羽毛球"],address:"西安市"});
- 插入文档的时候可以把数据定义为变量
txt=({name:"李四",age:19,sex:"男"});
db.user.insert(txt);
- 查找数据
db.collection.find(); // 查找当前集合的所有数据
- 更新文档
参数1:条件, 参数2 :更新字段,使用关键字:$set
db.user.update({name:"张三"},{$set:{age:29}});
==备注: 修改默认修改第一条,可选参数multi 默认是false ==
修改找到的多条数据
db.user.update({name:"毛豆"},{$set:{age:20}},{multi:true});
这样就可以把找到的多条,姓名+ 年龄修改;
修改的时候找不到修改的数据,可选参数 : upsert 默认是false 不插入 , true插入:
db.user.update({name:"王五"},{$set:{age:20,sex:"女"}},{upsert:true,multi:false});
- 文档替换: save()
db.user.save({});
里面的数据_id和要替换的数据_id一致
12. 删除文档
db.user.remove(); // 不写条件是所有的数据删除
db.user.remove({name:"毛豆"});
官方推荐
db.user.deleteOne({}); //条件 删除一条
db.user.deleteMany({}) //条件 删除多条 不写条件是全部删除
- 文档条件式查找
gt 、 gte、 lt、 lte、 ne:大于、大于等于、小于、小于等于、不等于;
db.user.find({age:18});
db.user.find({age:{$lt:20}});
db.user.find({age:{$lte:20}});
db.user.find({age:{$gt:20}});
db.user.find({age:{$gte:20}});
db.user.find({age:{$ne:20}});
and条件查找
db.user.find({name:"毛豆",age:{$lt:20}});
or条件查找
db.user.find({$or:[{name:"毛豆"},{name:"张三"}]});
and和or连用
db.user.update({age:{$lte:20}},{$set:{name:"张三"}});
修改文档找到多条数据 ,默认修改第一条 设置 multi:true 全部修改;
14. $type
操作符 :根据类型过滤数据
db.user.find({name:{$type:"object"}});
- limit 、skip 方法
limit: 读取多少条数据 ;
skip: 跳到某个位置;
数据分页
db.user.find().skip(0).limit(3);
- 模糊查找 /
db.user.find({name:/张/});
- 排序: sort() 1 正序 -1 倒序
db.user.find().sort({age:1}); // 正序
db.user.find().sort({age:-1}); // 倒序
- mongodb实现自动增长 ,建立一个辅助的集合实现增长
db.createCollection("count");
给count集合添加数据
db.count.insert({_id:"proId",autonum:0});
建立函数 操作count集合里面autonum字段自增
$inc
关键字 实现自增自减操作的
function getNext(idName){
var obj=db.count.findAndModify(
{
query:{_id:idName},
update:{$inc:{autonum:1}},
"new":true
});
return obj.autonum;
};
//某个表里面实现_id 自增
db.msg.insert({_id:getNext("proId"),name:"张三"});
- 索引的作用是 :提高查询的效率
db.user.createIndex({name:1}) //这里的正负1 代表正序和倒序
db.user.ensureIndex({name:1}) // 这个创建索引也行
获取集合里面的索引
db.user.getIndexes();
删除索引
db.user.dropIndex({name:1});
检测查询语句的执行速度
db.user.find({name:"李四"}).explain("executionStats");
创建复合索引 ,查询效率更高
db.user.createIndex({name:1,sex:1});
- 聚合
聚合表达式:$sum 总和 $avg 平均数 $min $max
aggregate 类似 count(*)
db.user.aggregate([{$group:{_id:"$name",num:{$sum:1}}}]);
管道:
$project
过滤字段
db.user.aggregate({
$project:{name:1,_id:0}
})
只输出user集合 name字段
$match 用于过滤数据的
$limit 返回几条数据
$skip 跳到文档的某个位置
$group 按照那个字段分组 分组的时候要使用聚合表达式
$sort 文档输出排序
//分开使用
db.user.aggregate([
{$project:{name:1,_id:0,sex:1,age:1}},
{$match:{age:{$lte:25,$gte:20}}},
{$sort:{age:1}},
{$group:{_id:"$name",avgage:{$avg:"$age"}}},
{$skip:3},
{$limit:3}
]);