-
MongoDB:文档存储,一般用类似json的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能。
-
Redis: key-value存储
-
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
-
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
-
MongoDB主要特点:
- MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
- 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName=“Sameer”,Address=“8 Gandhi Road”)来实现更快的排序。
- 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
- 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
- Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
- MongoDB使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
- MongoDB中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
- Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
- Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
- GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
- MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
- MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
- MongoDB安装简单。
-
在windows中安装完成之后,需要配置环境变量,在path中添加下面的配置项,才能在命令行中管理MongoDB
C:\Program Files\MongoDB\Server\4.0\bin
-
在windows的命令行中管理MongoDB
net start MongoDB; #启动MongoDB的服务 net stop MongoDB; #关闭MongoDB的服务 mongo; #连接MongoDB exit; #退出MongoDB
-
MongoDB与MySQL对应关系
MongoDB MySQL Database Database Collection Table Document Row -
Json 与 Bson
Bson是二进制的Json,Bson的效率非常高
-
MongoDB的常用命令
cls; #清屏
help; #帮助
-
Database的相关操作
show dbs; #查看所有的数据库 use demo; #转到指定的数据 db.createCollection('test1'); #创建数据库 db.getName(); #查看当前使用的数据库 db.getCollectionNames(); #查看所有创建的数据库 db.dropDatabase(); #删除当前正在使用的数据库
-
Collection的相关操作
db.employee.insertOne({"first_name": "Taylor","last_name": "Edward","title": "software engineer","salary": 7500,"internship": false}); #向表中插入一条数据 db.employee.insertMany([{"first_name": "Robin","last_name": "Jackman","title": "software engineer","salary": 3000,"internship": true},{"first_name": "Taylor","last_name": "Edward","title": "software engineer","salary": 7500,"internship": false}]); #向表中插入多条数据 db.employee.find(); #查看某个表中所有的数据 db.employee.find().pretty(); #格式化查看表中所有的数据 db.employee.drop(); #删除表 db.employee.insertOne("a":1,"b":2,"_id":"1"); #插入的时候指定id,但是id不能重复 db.employee.deleteOne({"_id":1}); #删除数据,会删除第一条匹配的数据 db.employee.deleteMany({"a":1}); #删除数据,删除所有匹配的数据 db.employee.deleteMany({"salary":{"$gt":2000}}); #删除salary大于2000的所有数据 db.employee.find({title:"software engineer"}); #查询title为software engineer的所有记录 db.employee.findOne({title:"software engineer"}); #查询title为software engineer的第一条记录 db.employee.find({salary:{"$gt":6000}}); #查询salary大于6000的所有记录 db.employee.findOne(); #查询表中的第一条记录 db.employee.find().toArray(); #将查询结果组装成一个数组 db.employee.find({}, {first_name:1, last_name:1}); #只查询指定字段的数据 db.employee.updateOne({"_id":ObjectId("5d28277d3456362e80ff6f78")}, {$set:{"salary":"4500"}}); #更新一条记录 db.employee.updateMany({"title":"software engineer"}, {$set:{"salary":"7600"}}); #更新多条记录 db.employee.update({"_id":ObjectId("5d28277d3456362e80ff6f78")}, {{"salary":"4500"}}); #覆盖的操作 db.employee.replaceOne({"_id" : ObjectId("5d28277d3456362e80ff6f78")}, {"A":1, "B":2});#覆盖的操作
-
updateMany和updateOne这更新指定的字段,update会用心传入的对象覆盖原有的对象。
-
find();一次值展示20条,类似于分页的功能,输入it可以查询下一页的数据,it为Cursor,默认返回前20条。
-
Document的嵌套,MongoDB也支持Document的嵌套,一个json对象里面还包含有数组或者json对象的对象,例如
[ { "first_name": "Robin", "last_name": "Jackman", "title": "software engineer", "salary": 3000, "internship": true, "hobby":["book", "movie"], "contact":{ "email":"Jackman@qq.com", "phone":"111111" } }, { "first_name": "Taylor", "last_name": "Edward", "title": "software engineer", "salary": 7500, "internship": false, "hobby":["book", "gym"], "contact":{ "email":"Edward@qq.com", "phone":"444444" } } ]
-
复杂Document的查询
db.employee.find({"contact.phone":"111111"}); #查询json对象里面套的json对象中的数据 db.employee.find({hobby:"book"}); #hobby是一个数组,查找hobby中包含book的数据 db.employee.find({hobby:["book","movie"]}); #查找hobby中包含book和movie的数据 db.employee.find({hobby:{$in: ["book","movie"]}}); #查找hobby中包含book或movie的数据
-
Document的亮点限制
- 单个Bson的Document最大不能超过16M;
- 单个Bson的Document的嵌套不能超过100层;
-
Collection中有SCHEMA,但是可以不遵守,在实际的使用中我们需要有原则的自由,而不是随意的往Collection中插入数据。
-
数据类型
类型 说明 String Boolean Number 32 bit integer, 64bit integer, Decimal ObjectID Date Timestamp,ISODate Array -
查看某条记录中具体字段的值及其对应的数据类型
db.employee.findOne().first_name #查看第一条数据的first_name的值 db.employee.findOne().hobby #查看数组类型的值 db.employee.findOne().contact.phone #查看文档下嵌套的json对象里面的某个字段的值 typeof db.employee.findOne().salary #查看某个字段具体的数据类型
-
时间数据类型
var a = new Date(); //定义一个Date的数据 var b = new Timestamp(); //定义一个时间戳的数据 db.test.insertOne({date: a, timestamp: b}); //向test表中插入数据
-
Number的数据类型
var a = 1234; //定义一个整形的数据 var b = Number(1234); //定义一个长整形的数据 var c = 1.001; //定义一个Decimal的数据 db.test.insertOne({a: a, b: b, c: c}; //向表中插入Number的数据 typeof db.test.findOne().a; //查看表中某个字段的数据类型