设为首页 收藏本站
查看: 1282|回复: 0

[经验分享] MongoDB笔记一之简介与入门【第一次编辑:排版】

[复制链接]
YunVN网友  发表于 2018-10-28 06:35:05 |阅读模式
  煮酒品茶:大量序语和实例引用自书中,品茶对其实验后做的笔记上载至博客,任何有版权的人都可以直接下架下文章,谢谢合作。
2012/8/14 14:00 MongoDB笔记一之简介与入门【第一次编辑:排版】  elain2012写的MongoDB 实战系列,真心不错!
http://blog.51cto.com/zt/99
MongoDB权威指南第一章MongoDB是一种强大、灵活、可扩展的数据存储方式。它扩展了关系型数据库的众多有用功能,如辅助索引、范围查询和排序。MongoDB的功能非常丰富,比如内置的对MapReduce式聚合的支持,以及对地理空间索引的支持。优点:1、丰富的数据模型MongoDB是面向文档的数据库,将原来的“行”(row),的概念换成更加灵活的“文档”(document)模型。MongoDB没有模式:文档的键不会事先定义也不会固定不变。2、容易扩展采用的面向文档的数据模型使其可以自动在多台服务器之间分割数据,还可以平衡集群的数据和负载,自动重排文档,开发者可以专注于编写应用,需要更大的容量,只需在集群中添加新机器,然后让数据库来处理剩下的事。3、丰富的功能索引(多种快速查询,也提供了咱一的,复合的和地理空间索引能力。)存储JavaScript(开发人员不必使用存储过程了,可以直接在服务端存储JavaScript的函数和值)聚合(支持MapReduce和其它聚合工具)固定集合(集合的大小是有上限的,对某些类型的数据【如:日志】特别有用)文件存储(支持用一种容易使用的协议存储大型文件和文件的元数据)4、不牺牲速度5、简便的管理主从复制,副本集,分片等。第二章  入门基本概念----------------------------------------文档是MongoDB中数据的基本单元。(doucument)集合可以被看做是没有模式的表(collections)MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限。MongoDB自带JavaScript shell,用于管理MongoDB实例和操和数据。每一个文档都有一个特殊的键"_id",它在文档所处的集合中是咱一的。-----------------------------------------文档:多个键及其关联的值有序的放置在一起便是文档。(key:vlaue) {"cwtea" : "hello","key":"vlaue"}注:文档中键的顺序并不重要。 1、文档中的键/值对应是有序的{"cwtea" : "hello","key":"vlaue"}和{"key":"vlaue","cwtea" : "hello"}完全不同2、文档中的值可以是多种数据类型,整字,字符串,甚至文档。键可以使用任意UTF-8字符。3、键不能含有\0(空字符),这个字符用来表示键的结尾。4、.和$有特别的意义,只有在特定环境下才能使用。5、以下划线"_"开头的键是保留的,虽然这个并不是严格要求的。6、mongoDB区分类型和区分大小写{"foo" : 3} 不同于{"foo" : "3"} 整数和字符串{ "foo" : "3"}不同于{"Foo" : "3"} 大小写7、mongoDB不能有重复的键 集合概念:集合就是一组文档 collections  无模式
概念:不同文档可存在同一个集合中。  命名:
可以满足下列条件的任意UTF-8字符串。1、集合名不能是空字符串""2、集合名不能含 有\0字符(空字符),这个字符表示集合名的结尾.3、集合名不能以"system."开发,这是为系统集合保留的前缀。4、用户创建的集合名字不能含有保留字符$。有些驱动程序的确支持在集合名里面包含$,这是因为某些系统生成的集合中包含该字符。  子集合:
组织集合的一种惯例是使用 "." 字符分开的按命名空间划分的子集合。GridFS是一种存储大文件的协议,使用子集合来存储文件的元数据,这样就与内容分开了。Web控制台通过子集合的方式将数据组织在DBTOP部分绝大多数驱动程序都提供语法糖,为访问指定集合的子集合提供方便。(db.blog代表blog集合,db.blog.posts代表blog.posts集合)  数据库:多个集合组成数据库。
一个MongoDB实例可承载多个数据库,它们之间可视为完全独立,每个数据库都有独立的权限控制,即便在磁盘上,不同的数据库存也放在不同的文件中。命名:数据库名最终会变成文件系统里的文件,所以会有以下限制。不能是空字符串("")不得含有''(空格)、,、$、/、/和\0(空字符)就全部是小写最多64字节  保留的数据库名:
admin(是"root"数据库,添加一个用户到这个数据库,则具有最高权限)local(这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合)config(当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息)命名空间:把数据库的名字放到集合名前面,得到就是集合的完全限定名db.blog.posts,命名空间的长度不得超过121,实际使用最好不超过100字节。MongoDB shell自带一个javascript shell,可以从命令行与MongoDB实例交互,可以执行管理操作,检查运行实例,变或做其他尝试。可以做javascript所做之事。 > math.sin(math.pi /2)Mon Aug 13 23:28:19 ReferenceError: math is not defined (shell):1> Math.sin(Math.PI /2)1> new Date("2010/1/1")ISODate("2009-12-31T16:00:00Z")> new Date("2010/1/1");ISODate("2009-12-31T16:00:00Z")> "hello ,world!".replace("world", "mongodb")hello ,mongodb!> "hello ,world!".replace("world1", "mongodb")hello ,world!> "hello ,2".replace("2", "mongodb")hello ,mongodb> function factorial (n) {... if (n  factorial(5);120  shell的基本操作:
创建、读取、更新和删除。创建: > use blogswitched to db blog> post = {"title" : "my blog post",... "content" : "here is my blog post.",... "date" : new Date()}{"title" : "my blog post","content" : "here is my blog post.","date" : ISODate("2012-08-13T16:24:51.467Z")}> db.blog.insert(post)> db.blog.find(){ "_id" : ObjectId("50292a7870fc23d6b7514586"), "title" : "my blog post", "content" : "here is my blog post.", "date" : ISODate("2012-08-13T16:24:51.467Z") }查询:find显示最多20条匹配 > db.blog.findOne(){"_id" : ObjectId("50292a7870fc23d6b7514586"),"title" : "my blog post","content" : "here is my blog post.","date" : ISODate("2012-08-13T16:24:51.467Z")}> db.blog.find({},{"title": 1} ){ "_id" : ObjectId("50292a7870fc23d6b7514586"), "title" : "my blog post" }{ "_id" : ObjectId("50292b1a70fc23d6b7514588"), "title" : "two" }update更新:至少两个参数:第一个是要更新的文档的限定条件,第二个是新的文档。 > post{"title" : "my blog post","content" : "here is my blog post.","date" : ISODate("2012-08-13T16:24:51.467Z")}> post.comments =[][ ]> post{"title" : "my blog post","content" : "here is my blog post.","date" : ISODate("2012-08-13T16:24:51.467Z"),"comments" : [ ]}> post.test="hello"hello> post{"title" : "my blog post","content" : "here is my blog post.","date" : ISODate("2012-08-13T16:24:51.467Z"),"comments" : [ ],"test" : "hello"} #替换标题为my blog post的文章,第一个为条件,第二个为更新内容。> db.blog.update({title : "my blog post"}, post)> db.blog.find(){ "_id" : ObjectId("50292b1a70fc23d6b7514588"), "title" : "two", "content" : ISODate("2012-08-13T16:28:10.372Z") }{ "_id" : ObjectId("50292a7870fc23d6b7514586"), "title" : "my blog post", "content" : "here is my blog post.", "date" : ISODate("2012-08-13T16:24:51.467Z"), "comments" : [ ], "test" : "hello" }> db.blog.update({title : "two"}, {"title" : "baidu","content" : "www.cwtea.com" })> db.blog.find(){ "_id" : ObjectId("50292a7870fc23d6b7514586"), "title" : "my blog post", "content" : "here is my blog post.", "date" : ISODate("2012-08-13T16:24:51.467Z"), "comments" : [ ], "test" : "hello" }{ "_id" : ObjectId("50292b1a70fc23d6b7514588"), "title" : "baidu", "content" : "www.cwtea.com" }删除:remove用来从数据库中永久性地删除文档 > db.blog.remove({"title" : "baidu"})> db.blog.find(){ "_id" : ObjectId("50292a7870fc23d6b7514586"), "title" : "my blog post", "content" : "here is my blog post.", "date" : ISODate("2012-08-13T16:24:51.467Z"), "comments" : [ ], "test" : "hello" }#随时使用help可以使用集合(javascript)  基本数据类型:
类似于JSON叫BSON的东西。缺点:JSON没有日期类型,只有一种数字类型,没法区分浮点数和整数,更不能区分32位和64位数字,也没有办法表示其他常用类型,如正则表达式或函数。MongoDB增加了其他一些数据类型:null、布尔、32整数、64位整数、64位浮点数、字符串、符号、对象ID、日期、正则表达式、代码、二进制数据、最大值、最小值、未定义、数组、内嵌文档。数字日期:date()不等于new date()数组:{"things" : ["pie",3.14]}内嵌文档 > lq = { "name" : "cwtea",... "address" : {... "a" : "1",... "b" : "2",... "c" : "3",... }... ,"hello" :"cwtea"}{"name" : "cwtea","address" : {"a" : "1","b" : "2","c" : "3"},"hello" : "cwtea"}> db.blog.insert(lq)> db.blog.find(){ "_id" : ObjectId("50292a7870fc23d6b7514586"), "title" : "my blog post", "content" : "here is my blog post.", "date" : ISODate("2012-08-13T16:24:51.467Z"), "comments" : [ ], "test" : "hello" }{ "_id" : ObjectId("5029363070fc23d6b7514589"), "name" : "cwtea", "address" : { "a" : "1", "b" : "2", "c" : "3" }, "hello" : "cwtea" }>  id和Objectld
存储文档必须有一个"_id"默认是个ObjectId对象。ObjectId 0-3[时间戳]4-6[机器]7-8[pid]9-11[计数器]

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-627246-1-1.html 上篇帖子: Mongodb Replica Configure 下篇帖子: MongoDB身上的优势和劣势
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表