<?php
/* * * * nosql总结: * 1.shell的基本操作: * 创建/读取/更新和删除(CRUD) * insert 函数添加一个文档到集合里面!例如,假设要存储一博客文章:首先要创建一个局部变量post,内容是代表文档的Javascript对象!里面会有"title","content"和"data"(发表日期)几个键! * >post={"title":"My Blog Post", * ......"content":"Here's my blog post", * ......"date" :new Date()} * { * title:"My Blog Post", * "content":"Here's my blog post", * "data":"日期" * } * db.blog.insert(post) * 这个文章已经被存入了blog数据库了! * 2.查看文件.find() * db.blog.find() * { * * } * 读取:find会返回集合里面所有的文档!如果只是要查看一个文档,可以使用findOne; * db.blog.findOne(){ * * } * find和findOne可以接受查询文档形式的限定条件!这将通过查询限制匹配的文档!使用find时,shell自动显示最多20个匹配文档,但可以获取更多的文档! * * 更新: * 如果要更新博客,可以使用update的使用: * update接受(至少两个参数),第一个是要更新文档的限定条件,第二个是更新的文档,假设决定我们先前写的文章增加评论的内容,要加入一个新的键,对应的值就是存放评论的数组 * * 第一步修改变量post,增加comments键: * >post.comments=[] * [ ] * 然后执行updata操作,用新版本的文档替换标题为"My Blog Post"的文章 * db.blog.updata({title:"My Blog Post"},post) * * 删除: * remove 用来从数据库中永久的删除文档!在不使用参数进行调用的情况下,他会删除一个集合内的所有的文档,他可以接受一个文档以指定限定条件, * >db.blog.remove({title:"My Blog Post"}) * * * 数据类型: * MongoDB在保留JSON基本的键/值对特性的基础上,添加了其他一些数据类型!在不同的编程语言下这些类型的表示有差异! * null * 用于表示空值或者是不存在的字段 * 布尔型:有两个值true和false * * 32位整数 * * 64位整数 * * 64位浮点数 * * 字符串 * * 符号 * shell不支持这种类型! * 对象id * * 日期类型:{"x":new Date()} * * 未定义的类型: * {"x":undefinded} * * 内嵌文档:文档可以包含别的文档,也可以作为值嵌入到父文档中: * {"x":{"foo":"bar"}} * * 数组: * { * "name":"John Doe", * "address":{ * "street":"123 Park Street", * "city":"Anytown", * "state":"NY" * } * } * 合理的使用内嵌文档可以让处理数据的方式!并能"深入"其中构建索引,执行查询,或者更新! * 在MongoDB中可以将地址文档直接嵌入人员文档中,使用得当的话,内嵌文档会使信息表示得更加自然(通常也会高效) * * 但是这样做也有坏处,因为MongoDB会存储更多复杂的数据,这样是反规范化的,如果在关系数据库中"address"在一个i独立的表中,要修复地址中的拼写错误!当我们对"people"和"address"执行连接操作的时候,每一个使用这个地址的人的信息都会得到更新!但是在MongoDB中,则需要在每个人的文档中修正拼写错误! * * 要删除文档: * db.blog.remove() * db.mailing.list.remove({"opt-out":true}) * 上述命令会删除users集合中的所有的文档,但不会删除集合本身,原有的索引也会保留 * remove函数会接受一个查询文档作为可选参数,给定参数以后,只有符合条件的文档才会被删除! * db.mailing.list.remove({"opt-out":true}) * 删除数据是永久性的,不能撤销,也不能恢复 * * * 更新文档: * 文档存入数据库以后,就可以使用update方法来修改它!update有两个参数,一个是查询文档,用来找出要更新的文档,另一个是修改器文档,描述找到的文档做哪些更改! * 更新操作是原子的:如果是两个更新同时发生,先到达服务器的先执行,接着执行另外一个,所以,互相有冲突的更新可以火速传递,并不会相互干扰,最后的更新会取得"胜利" * * 使用修改器:通常文档只会有一部分要更新!利用原子的:"更新修改器",可以使得这种部分更新极为高效!更新修改器是种特殊的键,用来指定复杂的更新操作,比如调整.增加或者删除键,还可能是操作数组或者内嵌文档! * * $set甚至可以修改键的数据类型! * $set修改器入门,$set用来指定一个键的值!如果这个键不存在,则创建他!这对更新模式或者增加用户定义键非常方便!甚至可以更改数据类型! *