本文默认已经装好了mongodb,在cmd中使用,检测方式为,在一个cmd窗口中输入【mongod】打开服务器端,再打开另一个窗口,输入【mongo】打开可以链接服务端的客户端。

本文主要内容来自于《mongodb权威指南》,pdf地址在文末

如下

简介

  • 易于使用

    mongodb是一个面向文档的数据库,由于关系型数据库导致的扩展型不强,基于此mongodb有如下不同

    1. 不再有"行"的概念,以文档取代:文档中可以嵌入多种数据类型,还可以再次在数据类型中嵌入新的数据类型
    2. 不在有固定模式:key和value不再固定类型和大小,这个value是字符串,下一个value可以是整型
  • 易于扩展

    随着数据量的成倍增长,数据库也要进行相应扩展

    1. 纵向扩展,用更多的计算机……
    2. 横向扩展,在多台计算机中进行数据分割,进而产生切片,复制等新功能(属于进阶功能)
  • 功能丰富

    MongoDB作为一款通用型数据库,除了能够创建、读取、更新和删除数据之外,还提供一系
    列不断扩展的独特功能。

    1. 索引(indexing)
      MongoDB支持通用二级索引,允许多种快速查询,且提供唯一索引、复合索引、
      地理空间索引,以及全文索引。
    2. 聚合(aggregation)
      MongoDB支持“聚合管道”(aggregation pipeline)。用户能通过简单的片段创建
      复杂的聚合,并通过数据库自动优化。
    3. 特殊的集合类型
      MongoDB支持存在时间有限的集合,适用于那些将在某个时刻过期的数据,如会
      话(session)。类似地,MongoDB也支持固定大小的集合,用于保存近期数据,
      如日志。
    4. 文件存储(file storage)
      MongoDB支持一种非常易用的协议,用于存储大文件和文件元数据。

基础知识

先介绍几个概念

概念 解释
文档 MongoDB中数据的基本单元,非常类似于关系型数据库管理系统中的行,但更具表现力。
集合 一个拥有动态模式(dy namic schema)的表,有多个文档组成
数据库 每一个数据库都拥有自己的集合。
实例 MongoDB的一个实例可以拥有多个相互独立的数据库(database),
  • 文档:键值对的一个有序集

    这是mongdb的核心,文档就是键值对的一个有序集,很像json,如

    {"greeting" : "Hello, world!"}
    

    就是一个文档,只有一个键greeting,当然,可以有多个键,并且value值任意(json不行)

    {"greeting" : "Hello, world!", "foo" : 3}
    

    另外,mongodb区分类型,区分大小写,也不能重复,下面两个文档是不同的

    {"foo" : 3}
    {"foo" : "3"}
    

    下面两个文档也是不同的:

    {"foo" : 3}
    {"Foo" : 3}
    
  • 集合:多个文档就构成了集合

    动态模式:就是集合里面的文档是多种多样的,正如

     {"greeting" : "Hello, world!", "foo" : 3}
    

    既然文档什么都可以装,那为什么还需要集合呢

    在实践中,并不推荐这种把不同类型的文档放入一个集合的方式

    比如一个文档可以有username,age,score等键,那么含有相同键的文档就可以放入一个名为students的集合中,而如果这个集合又放入了其他类型的文档,将会给维护带来很大麻烦。

    所以这就是集合的作用——归类作用相同的文档

  • 数据库:多个集合组成数据库

    一个mongodb实例可以有多个数据库,打开cmd客户端,输入mongo进入的进程就是一个实例

    每个数据库都将成为文件系统中的文件,数据库名就是相应的文件名,所以数据库的命名有以下限制

    不能是空字符串("")。
    不得含有/、\、.、"、*、<、>、:、|、?、$(一个空格)、\0(空字符)。基本
    上,只能使用ASCII中的字母和数字。
    数据库名区分大小写,即便是在不区分大小写的文件系统中也是如此。简单起
    见,数据库名应全部小写。
    数据库名最多为64字节。

增删改查实战操作

要进行此项操作,请先确认能进入mongodb数据库

  1. 创建
    insert函数可将一个文档添加到集合中。举一个存储博客文章的例子。首先,创建一个名
    为post的局部变量,这是一个JavaScript对象,用于表示我们的文档。它会有几个
    键:“title”、“content"和"date”(发布日期)。
>post = {"title" : "My Blog Post",
... "content" : "Here's my blog post.",
... "date" : new Date()}

这个对象是个有效的MongoDB文档,所以可以用insert方法将其保存到blog集合中:

>db.blog.insert(post)

这篇文章已被存到数据库中。若只想查看一个文档,可用findOne


可以看到,我们曾输入的键/值对都已被完整地记录。此外,还有一个额外添加的
键"_id"。

  1. 读取
    find和findOne方法可以用于查询集合里的文档。find可最多输出20个文档
    find和findOne可以接受一个查询文档作为限定条件。这样就可以查询符合一定条件的文
    档。使用find时,shell会自动显示最多20个匹配的文档,也可获取更多文档。第4章会详细
    介绍查询相关的内容。

  2. 更新
    使用update修改博客文章。update接受(至少)两个参数:第一个是限定条件(用于匹
    配待更新的文档),第二个是新的文档。假设我们要为先前写的文章增加评论功能,就需要
    增加一个新的键,用于保存评论数组。
    首先,修改变量post,增加"comments"键:

>post.comments = []


然后执行update操作,用新版本的文档替换标题为“My Blog Post”的文章:

db.blog.update({title : "My Blog Post"}, post)

现在,文档已经有了"comments"键。再用find查看一下,可以看到新的键:

  1. 删除
    使用remove方法可将文档从数据库中永久删除。如果没有使用任何参数,它会将集合内的
    所有文档全部删除。它可以接受一个作为限定条件的文档作为参数。例如,下面的命令会删
    除刚刚创建的文章:
db.blog.remove({title : "My Blog Post"})

现在,集合又是空的了。

大量优质电子书地址