一、要点解释
1.mongoDB优点:
1.MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。
2.如果负载的增加,它可以分布在计算机网络中的其他节点上这就是所 谓的分片。
3. MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++, PHP,C#等多种语言。
4.你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的 扩展性。
2.常见的数据库
关系型数据库和NoSQL数据库
3.MongoDB的特点:
4.为什么要学习MongoDB
MongoDB解决Mysql 的“三高”问题:
1.对数据库高并发写入需求
2.对海量数据高效率存储访问需求 3.对数据库高扩展和高可用的需求
MongoDB 实际应用:
1.社交场景,比如朋友圈,附近的人的地点的存储
2.游戏场景,比如用户当前装备,得分等
3.物流场景,比如快递的位置,状态,途径 4.视频场景,比如直播中的点赞数和互动留言等。
5.MongoDB的缺点:
1. MongoDB 不支持事务
2. MongoDB 不能进行多表联查
6.MongoDB和Mysql对比:
7.MongoDB名词概念:
二、MongoDB数据库显示
查看所有数据库:show dbs;
有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。
•admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数 据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
•local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
•config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
三、 MongoDB数据库创建/删除
创建数据库: use studentcourse
如果数据库不存在,则创建数据库,否则切换到指定数据库。 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档
(记录),集合才会真正创建。 通过 db 来查看当前使用的数据库
删除数据库: db.dropDatabase()
四、MongoDB的操作集合
创建集合:db.createCollection('student')
查看集合: show collections;
删除集合: db.student.drop;
五、MongoDB数据类型
六、MongoDB在集合中插入数据
插入的数据被称为文档。
文档的数据结构和 JSON 基本一样。 所有存储在集合中的数据都是 BSON 格式。
BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。
db.集合名.insert(document)
db.col.insert({title: '一些数据',
description: 'MongoDB 是一个 Nosql 数据库',
tags: ['mongodb', 'database', 'NoSQL'] })
实现代码:
//插入数据
db.student.insert(
{
shuai: true,
money: true,
gf: [{ stuname: '小张' }, { stuname: '小李' }]
}
)
db.student.insert({ stuname: '张三', age: 16 })
db.student.insert({ stuname: '李四', age: 17 })
db.student.insert({ stuname: '王五', age: 16 })
db.student.insert({ stuname: '赵六', age: 18 })
db.student.insert({ stuname: '哈哈', age: '19' })
db.student.insert({ stuname: '赵六六', age: 18 })
db.student.insert({ stuname: '六六', age: 20 })
db.student.insert({ stuname: '六小龄童', age: 20 })
db.student.insert({ stuname: '刘小', age: 20 })
db.student.insert({ stuname: '小小', age: 21 })
八、MongoDB在集合中更新数据
更新数据
语法:
db.集合名.update({查询条件},{$set:{更新内容}}, { upsert: ,
multi: ,
} ) upsert: 默认为false ,如果查询不到数据,则把跟新输入插入
multi:默认为false,默认只改一条,true,更改多条
实现代码:
//修改数据
use myschool;
//修改如果有多个结果符合条件时,只改_id最小的一个
db.student.update(
{ stuname: '赵六' }, //条件
{ $set: { age: 18 } }
);
//{mutil:true} 把所有符合条件的都修改
db.student.update(
{ stuname: '赵六' }, //条件
{ $set: { age: 25 } },
{ multi: true }
);
db.student.insert({ stuname: '赵六', age: 20 })
//{upsert:true}没有匹配到的数据作为新增值的主键
db.student.update(
{ stuname: '小张' },
{ $set: { age: 20 } },
{ upsert: true }
);
//数值改变
db.student.update(
{ stuname: '小张' },
{ $inc: { age: -50 } }
);
更新数据
如果我们想实现在某一列上在原有的值基础之上进行递增1效果可以用$inc运算符来实现
语法:
db.集合名.update({查询条件},{$inc:{字段名:NumberInt(1)}})
例如
db.col.update({‘_id':’1'},{$inc:{likenum:NumberInt(1)}})
九、MongoDB在集合中删除文档
实现代码:
//删除数据
//全部删除
db.student.remove({});
//带条件删除
db.student.remove({ stuname: '张三' });
//注意
db.student.remove({ age: 60 });
//主键编号较小的一条数据
db.student.remove({ age: 16 }, { justOne: true });
db.student.remove({ age: '19' }, { justOne: true });
十、MongoDB在集合中查询文档
实现代码:
//查询
//全查
db.student.find();
//根据条件查询
db.student.find({ stuname: '赵六' });
//age 小于20岁的人
db.student.find({ age: { $lt: 20 } });
//age 大于等于18并且age1小于等于60
db.student.find(
{
age: { $gte: 18, $lte: 60 },
}
);
MongoDB的 Or条件:
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开, 即常规 SQL 的 AND 条件。
db.col.find({key1:value1, key2:value2})
以上实例中类似于 WHERE 语句:WHERE key1=‘value1’ AND key2=‘value2'
//或$or
db.student.find(
{
$or: [
{ age: { $gte: 18 } },
{ age: { $lte: 60 } }
]
}
);
//模糊查询
//:/开始/结束
db.student.find({stuname:/六/});
db.student.find({stuname:/^六/});
db.student.find({stuname:/六$/});
//分页
//limit(步长)
//skip((页码-1)*步长)
db.student.find().limit(2).skip((3-1)*2);
//统计
db.student.find({stuname:'赵六'}).count();
//排序sort()
//1升序
//-1降序
db.student.find().sort({age:1});
db.student.find().sort({age:-1});
//索引
db.student.getIndexes();
//创建索引
db.student.createIndex({age:1});
db.student.createIndex({age:-1});
//删除索引
db.student.dropIndex({age:1});