数据库(一)----mongoDB

        mongoDB是一种强大,灵活,可扩展的数据存储方式,它扩展了关系型数据库的众多有用功能,如辅助索引,范围查询和排序。mongoDB容易上手,便于使用,它是面向文档的数据库,不是关系型数据库。

       文档是mongoDB中数据的基本单元,类似于关系型数据库中的行,但mongoDB中的文档要比行复杂的多;类似的集合可以被看做是没有模式的表;mongoDB的单个实例可以容纳多个数据库,每一个都有自己的集合和权限;mongoDB自带简洁但功能强大的javascript shell ,这个工具对于管理mongoDB实例和数据库操作的作用非常大;每一个文档都有一个特殊的键"_id",它在文档所处的集合中是惟一的,是自动生成的。

       文档是mongoDB的核心概念,多个键及其关联的值有序的放置在一起就是文档。文档中的键/值对是有序的,{“foo”:1, "bar":2} 和 {“bar”:2, "foo":1}是两个完全不同的文档。文档的键是字符串,值可以是其他的数据类型甚至可以是整个嵌入的文档。MongoDB区分类型,区分大小写,文档中不能有重复的键。

       集合就是一组文档,是无模式的,这意味着一个集合里的文档是各式各样的。

       mongoDB中的多个文档组成集合,同样多个集合可以组成数据库。一个mongoDB实例可以承载多个数据库,它们之间可视为完全独立的。每个数据库都有独立的权限控制,即使是在磁盘上,每个数据库也放在不同的文件中。

下面主要介绍mongoDB的一些基本操作。比如我们创建了一个数据库db,一个集合blog

1.插入

     insert函数添加一个文档到集合里。

    > post = {"title":"my blog post", "content": "here is my blog post"}

   > db.blog.insert(post)

    当执行插入的时候,使用的驱动程序会将数据转换成BSON的形式,然后将其送入到数据库。数据库解析BSON,检验是否包含“_id”键,并且文档不超过4MB,除此之外,不做别的数据验证,就知识简单的将文档存入数据库。它能让数据库更加的安全,mongoDB在插入时并不执行代码,远离了注入式攻击。

2.读取

   find会返回集合里所有的文档,如果想返回一个文档,findOne.

   > db.blog.find()                   //会返回集合中所有的文档

   > db.blog.findOne()            //会返回集合中的一个文档

  > db.blog.find({"title": "blog"})                      //会返回集合中所有title值是blog的文档,也就是说find,findOne可以接受查询文档形式的限制条件

3.更新

   update至少接受2个参数,第一个是要更行文档的限制条件(就是标识要更新哪个文档),第二个是新的文档(就是用来替换就得文档)。

   > post.comments = []                       //post增加一个新的键“comments”

  >db.blog.update({"title":"my blog post"}, post)                       //用新的post来替换title为“my blog post”的文档

4.删除

  remove用来从数据库中永久性的删除文档。在不适用参数的情况下,删除集合中所有的文档,它也可以接受一个文档以指定限定条件。

  >db.blog.remove()                          //删除集合中的所有的文档

 >db.blog.remove("title":"my blog post")                        //仅删除title值为“my blog post”的文档

 remove删除集合中的所有的文档,并不删除索引

5.save

    save 是一个shell函数,可以再文档不存在时插入,存在时更新。它只有一个参数:文档。

    > var x = db.foo.findOne()

    > x.num = 42

    > db.foo.save(x)

    > db.foo.findOne()

       {"num":42}

6.索引

    索引是用来加速查询的,建立索引的方法是用ensureIndex

   > db.people.ensureIndex("username":1)        //对username建立索引,提高查询速度,在同一个集合里,同样的索引只需要创建一次,反复创建时徒劳的。键值1表示的是索  引创建的方向(升序还是降序)

   唯一索引可以确保集合中的每一个文档的指定键的值是惟一的。

   在创建唯一索引的时候,如果集合中的键的值有重复,那么唯一索引就会创建失败,可以用dropDups来消除重复

   > db.people.ensureIndex({"username":1}, {"unique":true, "dropDups":true})                   //创建“username”为唯一索引

   索引的元信息存储在每个数据库的system.indexs集合中,这是一个保留集合,不能对其插入和删除文档。操作只能通过ensureIndex和dropIndexs进行。

   > db.runCommand({“dropIndexs”: "foo", "index":"alphabet"}) 

   要删除所有的索引,将index赋值为*

   > db.runCommand({"dropIndexs": "foo", "index":"* "})

   另外一种删除索引的办法就是删除集合,这会把_id索引也删除了。

7.count

   count是最简单的聚合工具,返回集合中的文档

   >db.foo.count()



 

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值