nosql笔记1_早前的时候

<?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用来指定一个键的值!如果这个键不存在,则创建他!这对更新模式或者增加用户定义键非常方便!甚至可以更改数据类型!
     *
     *+-------------------------------------------------------------------------------------------------+

     * $inc修改器用来增加已有键的值!或者在键不存在的时候创建一个键,对于分析数据/因果关系,投票或者其他有变化数值的地方,使用这个都会很方便!
     *
     *  $inc和$set的用法类似,就是专门来增加(和减少)数字的!
     *  $inc只能用于整数/长整数或双精度浮点数!要是在用在其他类型的数据上就会导致操作失败!
     *  其中包括很多语言会自动转换成数字的类型!例如null/布尔型或数字构成的字符串!
     *
     *
     *
     *+-------------------------------------------------------------------------------------------------+
     * 数组修改器:数组是常用且非常有用的数据结构!他们不仅仅是可通过索引进行引用的列表,并且还可以作为集合来用
     * 数组操作,顾名思义,只能用在值为数组的键上,例如不能对整数进行push也不能进行pop,
     *
     * 修改器速度:
     *
     * upsert是一种特殊的更新!要是没有文档符合更新条件,就会以这个条件和更新文档作为基础来创建一个新的文档,如果找到了匹配的文档,则正常更新!要是没有文档符合更细的条件,那么就会以这个条件和更新文档为基础创建一个i额新的文档,

posted @ 2012-09-21 12:05  sgsheg  阅读(165)  评论(0编辑  收藏  举报