MongoDB详解(1)
-
- MongoDB
-
- 概念
- 优点
- 特点
- [MongoDB解决Mysql 的"三高"问题(mysql的缺点或劣势)](#MongoDB解决Mysql 的“三高”问题(mysql的缺点或劣势))
- [MongoDB 实际应用](#MongoDB 实际应用)
- MongoDB的操作
MongoDB
概念
- MongoDB是一个介于关系数据库和非关系数据库(nosql)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。(支持分布式)
优点
- MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。
- 如果负载的增加,它可以分布在计算机网络中的其他节点上这就是所
谓的分片。 - MongoDB支持各种编程语言 :RUBY,PYTHON,JAVA,C++,
PHP,C#等多种语言。 - 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的
扩展性。
特点
- 无需要跨文档或跨表的事务及复杂的join查询支持(不支持事务和联查)
- 敏捷迭代的业务,需求变动频繁,数据模型无法确定
- 存储的数据格式灵活,不固定,或属于半结构化数据
- 业务并发访问量大(分布式)
- TB级以上的海量数据存储,且数据量不断增加(大数据量)
- 要求存储的数据持久化、不丢失
- 需要99.999%的数据高可用性
- 需要大量的地理位置查询、文本查询
MongoDB解决Mysql 的"三高"问题(mysql的缺点或劣势)
- 对数据库高并发写入需求
- 对海量数据高效率存储访问需求
- 对数据库高扩展和高可用的需求
MongoDB 实际应用
- 社交场景,比如朋友圈,附近的人的地点的存储
- 游戏场景,比如用户当前装备,得分等
- 物流场景,比如快递的位置,状态,途径
- 视频场景,比如直播中的点赞数和互动留言等
MongoDB的操作
库操作
查看所有库
show dbs;
创建库
use myschool;
查看当前库
db;
删除库
db.dropDatabase();
集合操作
查看集合
show collections;
创建集合
db.createCollection("student");
删除集合
db.student.drop();
数据操作
插入数据
db.student.insert({ name: "张三", age: 18, money: 12000.00 });
db.student.insert({ name: "李四", age: 20, money: 12000.00 });
db.student.insert({ name: "王五", age: 25, money: 12000.00 });
db.student.insert({ name: "老刘", age: 3, money: 12000.00 });
db.student.insert({ name: "七七", age: 52, money: 12000.00 });
db.student.insert({ name: "钱二", age: 33, money: 12000.00 });
修改
db.student.update(
{ name: "张三" },
{ $set: { age: 20 } }
)
查询不到要修改的数据时,添加{upsert:true}
db.student.update(
{ uname: "张三" },
{ $set: { age: 20 } },
{ upsert: true }
)
一次修改多个 {multi:true}
db.student.update(
{ name: "张三" },
{ $set: { name: "张三丰" } },
{ multi: true }
)
在原来的基础上加-20 $inc: { age: NumberInt(-20) }
db.student.update(
{ uname: "张三" },
{ $inc: { age: NumberInt(-20) } }
)
删除
{}占位符 代表全部
db.student.remove({})
删除所有符合条件的数据
db.student.remove({ name: "张三丰" })
只删除查到的第一条数据
db.student.remove(
{ name: "张三丰" },
{ justOne: true }
)
查询
db.student.find()
db.student.find({ name: "张三" })
db.student.find({ age: { $lt: 20 } });
db.student.find({ age: { $lte: 20 } });
db.student.find({ age: { $gt: 20 } });
db.student.find({ age: { $gte: 20 } });
db.student.find({ age: { $ne: 20 } });
多个条件查询时
db.student.find(
{
name: { $ne: "张三" },
age: { $lt: 20 }
}
);
db.student.find(
{
$or: [
{ name: { $ne: "张三" } },
{ age: { $lte: 20 } }
]
}
);
范围查询
db.student.find({age: { $gte: 20 , $lte: 50} });
模糊查询 -- 正则表达式
db.student.find({name:/张/});
db.student.find({name:/^张/});
db.student.find({name:/张$/});
分页
db.student.find().limit(3).skip((2-1)*3)
统计
db.student.count({age})
排序
db.student.find().sort({age:1})
索引
查看索引
db.student.getIndexes()
创建索引 1升序 ,-1降序
db.student.createIndex({name:1});
db.student.createIndex({name:-1});
删除索引
db.student.dropIndex({name:-1});