MongoDB是一个文档型数据库,存储的是key:value,类似json数据 。是一个分布式,高性能的数据库。
1.MongoDB怎样创建数据库
use chat 会去检测chat数据库是否存在 不存在 创建+定位 存在直接定位
2.查看里面的所有数据库
show dbs; 显示所有的数据库 但是里面可能不存在你创建的数据库
原因是你的数据库里面什么数据都没有
要想显示创建的数据库 得向数据库添加数据
db.chat.insert({“name”:“张三”});
show dbs; 显示你创建的数据库
3.删除数据库
db.dropDatabase(); 删完之后会显示 ok:1
4.创建集合 collection 集合类似mysql的表 只不过存储的是文档json
db.createCollection(name,options);
name 为创建的集合名称 options设置当前集合的相关属性 可选
5.删除集合
db.collection.drop(); //db.user.drop(); true 删除成功
6.显示集合
show collections;
7.插入文档
db.user.insert({name:"",sex:"",age:""});
eg:
db.user.insert({name:"张三",age:20,sex:"男",hobby:["篮球","足球","羽毛球"],address:"西安市"});
8.插入文档的时候可以把数据定义为变量
txt=({name:"李四",age:19,sex:"男"});
db.user.insert(txt);
9.查找数据
db.collection.find(); 查找当前集合的所有数据
10.更新文档
参数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});
11.文档替换 save()
db.user.save({}); 里面的数据_id和要替换的数据_id一致
12.删除文档
db.user.remove(); 不写条件是所有的数据删除
db.user.remove({name:“毛豆”});
官方推荐
db.user.deleteOne({}); 条件 删除一条
db.user.deleteMany({}) 条件 删除多条 不写条件是全部删除
13 文档条件式查找
= 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"}});
15.limit skip 方法
limit 读取多少条数据 skip 跳到某个位置
数据分页
db.user.find().skip(0).limit(3);
16.模糊查找 /
db.user.find({name:/张/});
17.排序 sort() 1 正序 -1 倒序
db.user.find().sort({age:1}) 正序
db.user.find().sort({age:-1}) 倒序
18.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:"张三"});
19.索引 作用是 提高查询的效率
这里的正负1 代表正序和倒序
db.user.createIndex({name:1});
这个创建索引也行
db.user.ensureIndex({name:1});
获取集合里面的索引
db.user.getIndexes();
删除索引
db.user.dropIndex({name:1});
检测查询语句的执行速度
db.user.find({name:"李四"}).explain("executionStats");
创建复合索引
db.createIndex({name:1,sex:1});
查询效率更高
20.聚合
聚合表达式:$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}
]);