pdf文档 MongoDB简明教程

429.00 KB 16 页 0 下载 14 浏览 0 评论 0 收藏
语言 格式 评分
中文(简体)
.pdf
3
概览
1.1 1.2 1.3 1.4 1.5 Table of Contents Introduction NoSQL简介 初识MongoDB 快速入门 参考文献 1 My Awesome Book This file file serves as your book's preface, a great place to describe your book's content and ideas. Introduction 2 NoSQL简介 NoSQL=Not Only SQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起, 传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的 web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的 数据库则由于其本身的特点得到了非常迅速的发展。 NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其 是大数据应用难题。 发展现状 NoSQL数据库现在主要有四大分类: 分类 举例 典型应用 场景 数据 模型 优点 缺点 key- value 存储 Redis,Oracle BDB, 内容缓 存,主要 用于处理 大量数据 的高访问 负载,也 用于一些 日志系统 等等 Key 指向 Value 的键 值对, 通常 用 hash table 来实 现 查找速 度快 数据无结 构化,通 常只被当 作字符串 或者二进 制数据 列式 HBase,Cassandra,Riak 分布式的 以列 簇式 存 储, 查找速 度快, 可扩展 性强, 功能相对 NoSQL简介 3 数据 库 HBase,Cassandra,Riak 分布式的 文件系统 将同 一列 数据 存在 一起 性强, 更容易 进行分 布式扩 展 功能相对 局限 文档 型数 据库 CouchDB, MongoDb Web应用 (与Key- Value类 似, Value是 结构化 的,不同 的是数据 库能够了 解Value 的内容) Key- Value 对应 的键 值 对, Value 为结 构化 数据 数据结 构要求 不严 格,表 结构可 变,不 需要像 关系型 数据库 一样需 要预先 定义表 结构 查询性能 不高,而 且缺乏统 一的查询 语法 图结 构数 据库 Neo4J, InfoGrid, Infinite Graph 社交网 络,推荐 系统等。 专注于构 建关系图 谱 图结 构 利用图 结构相 关算 法。比 如最短 路径寻 址,N 度关系 查找等 很多时候 需要对整 个图做计 算才能得 出需要的 信息,而 且这种结 构不太好 做分布式 的集群方 案 NoSQL特点 1. 可以处理海量数据 2. 可以运行在便宜的PC服务器集群上 3. 击碎了性能瓶颈(省去sql转换时间) 4. 没有过多的操作 5. 支持者源于社区 NoSQL简介 4 初识MongoDB MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据 库中功能最丰富,最像关系型数据库的。 文档数据库,存储的是文档(Bson->json的二进制化) 特点: 内部执行引擎为JS解释器,把文档存储成bson结构,在查询时,转换成JS 对象,比可以通过熟悉的js语法来操作 Mongo和传统型数据库比,最大的不同: 传统型数据库:结构化数据,定好了表结 构后,每一行的内容,必是符合表结构的,就是说列的个数,类型都一样 mongo文 档型数据库: 表下的每篇文档,都可以有自己独特的结构(json对象都可以有自己独特 的属性和值) 思路: 如果有电影, 影评, 影评的回复, 回复的打分 在传统型数据库中, 至少要4张表, 关联度非常复杂. 在文档数据库中,通过1篇文档,即可完成. 体现出文档型数据库的反范式化 { fiim:'天龙八部' comment:[ { content:'王家卫的电影风格', reply:['支持','好'] } ] } 初识MongoDB 5 快速入门 启动mongod服务 ./bin/mongod --dbpath /path/to/database --logpath /path/to/log - -fork --port 27017 参数解释: --dbpath 数据存储目录 --logpath 日志存储目录 --port 运行端口(默认27017) --fork 后台进程运行 ⚠mongodb非常的占磁盘空间, 刚启动后要占3-4G左右,如果你用虚拟机练习,可 能空间不够,导致无法启动.可以用 --smallfiles 选项来启动, 将会占用较小 空间400M左右. 连接 So easy~ Ken@localhost:~$ mongo MongoDB shell version: 3.2.0 connecting to: test 连接远程mongo库 Ken@gaosongdeMacBook-Pro:~$ mongo 112.126.XX.XXX:27017 MongoDB shell version: 3.2.0 connecting to: 112.126.XX.XXX:27017/test > 入门命令 快速入门 6 show dbs #查看当前的数据库 use databaseName #选库 show tables/collections #查看当前库下的collection ----------------------------------------------- |> use shop; #Mongodb的库是隐式创建 | |#你可以use一个不存在的库 | |#然后在该库下创建collection,即可创建库 | |switched to db shop | | | |> show dbs; | |shop 0.078GB | |> db.createCollection('user'); | |{ "ok" : 1 } | |> show collections; | |system.indexes | |user | ----------------------------------------------- #collection允许隐式创建 Db.collectionName.insert(document) ----------------------------------------------- |> show collections; | |system.indexes | |user | |> db.goods.insert({_id:1,name:"goods"}) | |WriteResult({ "nInserted" : 1 }) | |> show collections; | |goods | |system.indexes | |user | |> db.goods.find(); | |{ "_id" : 1, "name" : "goods" } | ----------------------------------------------- #删除collection db.collectionName.drop() 快速入门 7 ----------------------------------------------- |> db.user.drop(); | |true | |> db.goods.drop(); | |true | ----------------------------------------------- #删除database db.dropDatabase() ----------------------------------------------- |> db.dropDatabase(); | |{ "dropped" : "shop", "ok" : 1 } | ----------------------------------------------- ##查看当前用户 > show users; #Print a list of all databases on the server. > show roles; #Print a list of all roles, both user-defined and built-in, for the current database. { "role" : "dbAdmin", "db" : "shop", "isBuiltin" : true, "roles" : [ ], "inheritedRoles" : [ ] } { "role" : "dbOwner", "db" : "shop", "isBuiltin" : true, "roles" : [ ], "inheritedRoles" : [ ] } { "role" : "read", "db" : "shop", "isBuiltin" : true, "roles" : [ ], "inheritedRoles" : [ ] 快速入门 8 } { "role" : "readWrite", "db" : "shop", "isBuiltin" : true, "roles" : [ ], "inheritedRoles" : [ ] } { "role" : "userAdmin", "db" : "shop", "isBuiltin" : true, "roles" : [ ], "inheritedRoles" : [ ] } CRDU操作 增:insert 快速入门 9 #增加单篇文档 > db.stu.insert({sn:001,name:"xiaoming"}) WriteResult({ "nInserted" : 1 }) > db.stu.find() { "_id" : ObjectId("5711a253c95cb3db6c1bd2b9"), "sn" : 1, "name" : "xiaoming" } #增加单个文档并指定_id > db.stu.insert({_id:2,sn:002,name:"hanmmm"}) WriteResult({ "nInserted" : 1 }) > db.stu.find() { "_id" : ObjectId("5711a253c95cb3db6c1bd2b9"), "sn" : 1, "name" : "xiaoming" } { "_id" : 2, "sn" : 2, "name" : "hanmmm" } #增加多个文档 > db.stu.insert([{_id:3,sn:002,name:"xiaogang"},{sn:111,name:"jj jj",age:9},{sn:021,age:91}]) BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 3, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] }) 删:remove #语法: db.collection.remove(查询表达式, 选项); #选项是指 {justOne:true/false},是否只删一行, 默认为false > db.stu.find(); { "_id" : ObjectId("5711a253c95cb3db6c1bd2b9"), "sn" : 1, "name" : "xiaoming" } { "_id" : 2, "sn" : 2, "name" : "hanmmm" } 快速入门 10 { "_id" : 3, "sn" : 2, "name" : "xiaogang" } { "_id" : ObjectId("5711a2c9c95cb3db6c1bd2ba"), "sn" : 111, "nam e" : "jjjj", "age" : 9 } { "_id" : ObjectId("5711a2c9c95cb3db6c1bd2bb"), "sn" : 17, "age" : 91 } > db.stu.remove({sn:2}); WriteResult({ "nRemoved" : 2 }) > db.stu.find(); { "_id" : ObjectId("5711a253c95cb3db6c1bd2b9"), "sn" : 1, "name" : "xiaoming" } { "_id" : ObjectId("5711a2c9c95cb3db6c1bd2ba"), "sn" : 111, "nam e" : "jjjj", "age" : 9 } { "_id" : ObjectId("5711a2c9c95cb3db6c1bd2bb"), "sn" : 17, "age" : 91 } > db.stu.find(); { "_id" : ObjectId("5711a253c95cb3db6c1bd2b9"), "sn" : 1, "name" : "xiaoming" } { "_id" : ObjectId("5711a2c9c95cb3db6c1bd2ba"), "sn" : 111, "nam e" : "jjjj", "age" : 9 } { "_id" : ObjectId("5711a2c9c95cb3db6c1bd2bb"), "sn" : 17, "age" : 91 } { "_id" : ObjectId("5711a4c1c95cb3db6c1bd2bc"), "sn" : 1, "name" : "hahh" } #只删除一行 > db.stu.remove({sn:1},true); WriteResult({ "nRemoved" : 1 }) > db.stu.find(); { "_id" : ObjectId("5711a2c9c95cb3db6c1bd2ba"), "sn" : 111, "nam e" : "jjjj", "age" : 9 } { "_id" : ObjectId("5711a2c9c95cb3db6c1bd2bb"), "sn" : 17, "age" : 91 } { "_id" : ObjectId("5711a4c1c95cb3db6c1bd2bc"), "sn" : 1, "name" : "hahh" } 快速入门 11 注意 1: 查询表达式依然是个json对象 2: 查询表达式匹配的行,将被删掉. 3: 如 果不写查询表达式,collections中的所有文档将被删掉!!! 改:update #语法: db.collection.update(查询表达式,新值,选项); > db.stu.find(); { "_id" : ObjectId("5711a4c1c95cb3db6c1bd2bc"), "sn" : 1, "name" : "hahh" } #文档中的其他列也不见了,改后只有_id和name列了.即--新文档直接替换了旧文档, 而不是修改 > db.stu.update({name:"hahh"},{name:"haha"}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 } ) > db.stu.find(); { "_id" : ObjectId("5711a4c1c95cb3db6c1bd2bc"), "name" : "haha" } #如果是想修改文档的某列,可以用$set关键字 > db.stu.find(); { "_id" : ObjectId("5711a2c9c95cb3db6c1bd2ba"), "s
下载文档到本地,方便使用
共 16 页, 还有 14 页可预览, 继续阅读
文档评分
请文明评论,理性发言.