由于互联网的迅速发展,云计算与Web2.0。这样大量的交互给数据库提出了更高的性能要求,传统的数据库(本文泛指SQL数据库),即关系数据库虽然具备良好的事物管理,但在处理
大量数据的应用时很难在性能上满足设计要求。NoSQL就是主要为了解决当下大量高并发高要求的数据库应用需求,关系数据库具有严格的参照性,一致性,可用性,原子性,隔离性等特点,因此会产生一些例如表连接等操作,这样会大大降低系统的性能。而在当前很多应用场景下对性能的要求远远强于传统数据库关注的点,NoSQL就是为了解决大规模数据与多样数据种类等问题,尤其是其中大数据的相关问题。NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,它指的是非关系型的数据库,是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准、ACID属性、表结构等等。NoSQL最早被提出是在20世纪80年代,在当时更多是强调的是与关系数据库区别对待,最近这些年被提及的更多是强调协助解决大数据等相关问题。NoSQL在大数据时代有自己的意义。
国内的互联网蓬勃发展,不仅涌现出BAT(百度,阿里巴巴,腾讯)之类的巨头,也带动了整个互联网行业的发展,大量的创业型公司如春笋般的涌出,在国家层面也提出了“互联网+”和“万众创业”的口号。更多传统的行业也开始拥抱互联网。但是无论是做所谓的生态平台还是传统业务的转型,涉及到的业务是多种多样的。这个时候企业架构师对于应用系统的核心——数据库管理不仅有传统的SQL选项也有了
NoSQL数据库在以下的这几种情况下比较适用:
国外:Google的BigTable 和Amazon 的Dynamo使用的就是NoSQL型数据库。
国内:百度、阿里、腾讯、新浪微博、视觉中国、优酷运营数据分析、飞信空间、豆瓣社区等..
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它的特点是高性能、易部署、易使用,存储数据非常方便。
手册:https://docs.mongodb.org/manual/
注意:部分win7系统需要安装补丁,KB2731284。
服务端:mongod 开启数据库服务mongod --dbpath C:mongodb
开启MongoDb服务命令:
--dbpath就是选择数据库文档所在的文件夹。
客户端:mongo 使用数据库
客户端:mongo 使用数据库ip地址:端口号
开启mongodb服务:要管理数据库,必须先开启服务,开启服务使用
mongod --dbpath c:mongodb
管理mongodb数据库:
mongo (一定要在新的cmd中输入)
清屏
cls
查看所有数据库列表
show dbs
使用数据库、创建数据库
use student
如果真的想把这个数据库创建成功,那么必须插入一个数据。
数据库中不能直接插入数据,只能往集合(collections)中插入数据。不需要专门创建集合,只
需要写点语法插入数据就会创建集合:
db.student.insert({“name”:”xiaoming”});
db.student系统发现student是一个陌生的集合名字,所以就自动创建了集合。
显示当前的数据集合(mysql中叫表)
show collections
删除数据库,删除当前所在的数据库
db.dropDatabase();
删除集合,删除指定的集合删除表
删除集合db.COLLECTION_NAME.drop()
db.user.drop()
插入数据,随着数据的插入,数据库创建成功了,集合也创建成功了。
db.表名.insert({"name":"zhangsan"});
db.userInfo.find();
相当于:select* from userInfo;
db.userInfo.distinct("name");
会过滤掉name中的相同数据
相当于:select distict name from userInfo;
db.userInfo.find({"age": 22});
相当于:select * from userInfo where age = 22;
db.userInfo.find({age: {$gt: 22}});
相当于:select * from userInfo where age >22;
db.userInfo.find({age: {$lt: 22}});
相当于:select * from userInfo where age <22;
db.userInfo.find({age: {$gte: 25}});
相当于:select * from userInfo where age >= 25;
db.userInfo.find({age: {$lte: 25}});
db.userInfo.find({age: {$gte: 23, $lte: 26}});
模糊查询用于搜索
db.userInfo.find({name: /mongo/});
//相当于%%
select * from userInfo where name like ‘%mongo%’;
db.userInfo.find({name: /^mongo/});
select * from userInfo where name like ‘mongo%’;
db.userInfo.find({}, {name: 1, age: 1});
相当于:select name, age from userInfo;
当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就
是排除name,显示name以外的列信息。
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
相当于:select name, age from userInfo where age >25;
升序:db.userInfo.find().sort({age: 1});
降序:db.userInfo.find().sort({age: -1});
db.userInfo.find({name: 'zhangsan', age: 22});
相当于:select * from userInfo where name = ‘zhangsan’and age = ‘22’;
db.userInfo.find().limit(5);
相当于:selecttop 5 *from userInfo;
db.userInfo.find().skip(10);
相当于:select * from userInfo where id not in (selecttop 10 * from userInfo);
db.userInfo.find().limit(5).skip(5);
可用于分页,limit是pageSize,skip是第几页*pageSize
db.userInfo.find({$or: [{age: 22}, {age: 25}]});
相当于:select * from userInfo where age = 22 or age = 25;
db.userInfo.findOne();
相当于:selecttop 1 * from userInfo;db.userInfo.find().limit(1);
db.userInfo.find({age: {$gte: 25}}).count();
相当于:select count(*) from userInfo where age >= 20;如果要返回限制之后的记录数量,要使用count(true)或者count(非0) db.users.find().skip(10).limit(5).count(true);
修改里面还有查询条件。你要该谁,要告诉mongo。查找名字叫做小明的,把年龄更改为16岁:
db.student.update({"name":"小明"},{$set:{"age":16}});
查找数学成绩是70,把年龄更改为33岁:
db.student.update({"score.shuxue":70},{$set:{"age":33}});
更改所有匹配项目:"
By default, the update() method updates a single document. To update multiple documents, use the multi option in the update() method.
db.student.update({"sex":"男"},{$set:{"age":33}},{multi: true});
完整替换,不出现$set关键字了:注意
db.student.update({"name":"小明"},{"name":"大明","age":16}); db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
相当于:update users set age = age + 50 where name = ‘Lisi’;
db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);
相当于:update users set age = age + 50, name = ‘hoho’where name = ‘Lisi’;
db.collectionsNames.remove( { "borough": "Manhattan" } ) db.users.remove({age: 132});
默认情况下,remove()方法删除所有匹配remove条件的文档。使用他justOne选项将删除操作限制为仅一个匹配的文档。
db.restaurants.remove( { "borough": "Queens" }, { justOne: true })
创建索引:
db.user.ensureIndex({"username":1})
获取当前集合的索引:
db.user.getIndexes()
删除索引:
db.user.dropIndex({"username":1})
创建复合索引:
db.user.ensureIndex({"username":1, "age":-1})
创建唯一索引:
db.user.ensureIndex({"userid":1},{"unique":true})
创建复合唯一索引:
db.user.ensureIndex({"username":1, "age":-1},{"unique":true})
db.user.find().explain( "executionStats" )