网鸟老兵系列课程之10天掌握MongoDB网鸟出击,必属精品!微博:http:/ chan)群:47700865(刺客巅峰)陈颜铭出品声明一哈本PPT根据MongoDB:The Definitive Guide原版制作而成;我很穷,但我大胆的承认我看的是盗版PDF;如果您发现翻译或描述有误,请不吝赐教;制作PPT时,我不一定会100%的引用书中提供的示例,看书的朋友不要见怪;如果有任何疑问请通过微博或QQ反馈给我;网鸟QQ群刺客巅峰(47700865)IT技术综合交流群组,这里神马都有。欢迎各种程序猿加入!NoSQL(23152359)新建的NoSQL专用群组,来吧!来吧!欢迎各位光临!研发团队(3178011)想入此群请先xx,呵呵,请先加老陈QQ(120468681)!声明功能丰富索引聚合分布式文件系统存储JavaScript定容集合可扩展性数据分片负载均衡海量数据支撑无模式非关系型面向文档的数据存储高性能空间预分配内存映射非事务性易管理Server自治机制自动故障转移动态集群MONGODB简介很多朋友将MongoDB亲切的译为“芒果”,老陈反对这个叫法,发音也相差较远,依着我,应该翻译为“猛狗”,酱紫才够强大够给力!数据库集合文档DatabaseCollectionDocumentDocumentCollectionDocumentMONGODB数据架构数据库任意UTF-8字符串(比如:网鸟);不能是空字符串;不得包含以下字符:(空格)、.、$、/、0;长度不得超过64字节;保留字:admin、local、config等;集合任意UTF-8字符串(比如:网鸟);不能是空字符串;不能包含0、$;不能以system.开头;文档任意UTF-8字符串(比如:网鸟);不能是空字符串;不能包含0、$;不能以_开头;数据库、集合、文档命名规范MongoDB的版本命名规范如:x.y.z;y为奇数时表示当前版本为开发版,如:1.5.1、1.7.2;y为偶数时表示当前版本为稳定版,如:1.6.3、1.8.2;详情:http:/www.mongodb.org/display/DOCS/Version+Numbers版本选择生产环境使用32位机器的,老陈无话可说,反正64位又运行不了,你没的选;在64位机器上坚决要使用64位版本,可以获得更大的内存映射空间,提升MongoDB的性能;至于操作系统,MongoDB是跨平台的,在下载页面找自己对应的版本即可;平台选择下载地址:http:/www.mongodb.org/downloads;直接运行:解压后,在命令行执行%setupPath%binmongod.exe即可;作为Windows服务:请参考http:/www.mongodb.org/display/DOCS/Windows+Service;其他操作系统请参考:http:/www.mongodb.org/display/DOCS/Quickstart;下载安装MONGODB的下载与安装 运行Shell 打开命令行;执行%setupPath%binmongo.exe即可进入MongoDB Shell;在MongoDB Shell中可以运行任何JavaScript脚本;在Shell中可以键入help以获取帮助,当然,都是E文的;数据操作 创建:db.test.insert(“Name”:“ymind chan”,“age”:8);读取:db.test.find(“Name”:“ymind chan”);更新:db.test.update(“Name”:“ymind chan”,“$set”:“age”:“5”);删除:db.test.remove(“Name”:“ymind chan”);MONGODB SHELL这里只是简单示例,更详细的教学还在后面!MongoDB底层使用Bson来维护数据,Bson是一种二进制下的类似于Json的数据格式。以下是MongoDB中几个值得啰嗦一下的数据类型:MONGODB的数据类型MongoDB的基本数据类型MongoDB的数组MongoDB的文档嵌套MongoDB的ObjectIdMONGODB的基本数据类型这个有神马好说的?nulltrue、false;bool仅支持64位浮点数,其他类型的数字会自动转化为此格式;数字支持UTF-8字符集;字符串存储标准纪元开始的毫秒数,不含时区;日期符合JavaScript语法的正则表达式;regex任何JavaScript代码;code可存储任意字节数的字节数组,但在Shell中无法使用;binary对象集合或列表在MongoDB可以被存储为数组;数组一个文档可以包含另外一个文档;嵌套文档详细内容请参考http:/bsonspec.org/#/specification;其他MongoDB中的数组既可以作为有序对象(如列表)来操作,也可以作为无序对象(如集合)来操作。MongoDB可以以原子操作的形式来修改或删除数组中的元素。下面是一个数组示例(不用怀疑,这就是Json语法):MONGODB的数组/这个不是数组Status:0,/这个是空数组Messages:,/包含3个元素的数组ResponseBody:h010t00101025,h010t00101039,h010t00101040“文档式存储的特色就是允许文档对象的嵌套,这能够使我们的实体数据在MongoDB的存在形式更加自然。老陈忠告:不要滥用嵌套文档,对于需要复杂运算才能完成的嵌套应当使用外键模式来解决,否则之后的DAL(Data Access Layer,数据访问层)开发会相当痛苦!以下是一个嵌套文档的格式示例:MONGODB的文档嵌套/根文档 Status:0,/嵌套文档ResponseBody:CityName:北京,Keyword:钓鱼台,/再套一个数组,数组的每个元素又是文档,NB吧!Landmarks:“Name”:“北京钓鱼台国际旅行社”,Name:钓鱼台“ObjectId是_id(貌似前面木有提过?木有关系,_id是MongoDB在每个文档中的默认唯一标识的名称)的默认类型。ObjectId的结构如下:MONGODB的OBJECTID如上图所述,ObjectId可以保证同一台机器上不同进程(即MongoDB实例)生成的值都是唯一的。详情请参考:http:/www.mongodb.org/display/DOCS/Object+IDs注意事项:当插入的文档并没有指定_id的时候,MongoDB会自动创建,并使用ObjectId类型;_id可以被指定为其他的类型,比如整数;关于自增标识,MongoDB没有内置自增标识,在目前的roadmap中也没有相关的规划,自定义自增标识的方法将会在后续内容中专门讲解;采纳老陈接触MongoDB一年多了,已经被彻底征服;我自己的项目()已经完全抛弃了关系型数据库;缺点最大的缺点就是无法支持复杂运算,因为按照MongoDB的架构思想来说呢,是想把这些都转移到驱动或App上;为了解决这个缺点,老陈自行研发了EntityDB与之互补(小声的说一句:EntityDB是使用C#开发的内存数据库托管框架,以较低的硬件成本换取高性能的复杂运算,但不保证绝对的稳定性)。GEO搜索不支持传统意义上的距离运算,而是使用“经纬度”“差值”,这个让我很纠结,甚至我放弃了其内置的GEO特性;分享我强烈的推荐大家使用各种NoSQL方案来逐步的替代已有的关系型数据库(我不特指MongoDB);对于新技术要多创建原型程序进行实践论证,而不是人云亦云,实际上我并不认为MongoDB就是绝对的最好;我主要做.NET开发,当前MongoDB官方提供的C#驱动中的连接池管理机制存在一些问题,在使用的时候应当尽量避免并发!结束语老陈一年前就想组建MongoDB中文社区,但命不好,注册MongoDB.CN失败(你们懂的),第二天被无耻的易名中国抢注,在此,偶强烈建议大家不要到易名中国查询未注册域名,那丫心贼黑!省略脏字3000个。后来无奈,我注册了MongoDB.CC。老陈诚邀有志之士以及乐于分享的朋友加盟组团共建此站,此站定位是非营利性技术交流平台,如果您抱着捞一把的心态加盟,请绕行。祝您好运!广告