# Hello,MongoDB *** MongoDB 是文档型数据库,mongo 来自于英文单词“Humongous”,中文含义为“庞大”。 MongoDB 更像是一个介于关系型数据库和非关系型数据库之间的数据库。是非关系型数据库中支持功能最多的,最接近关系型数据库。同时存储数据的格式是类似 json 的 bson 格式。因此可以存储结构更复杂的数据。 充分的利用了内存使 MongoDB 拥有比关系型的数据库更好的读写性能,支持索引,聚合。对分布式高度支持,并且可以使用廉价的硬件设施来运行数据库。所以 MongoDB 非常适合初期需求变动频繁的创业团队,加快产品上市时间,降低企业成本。 ## 1. 安装配置 MongoDB 除了可以按照文中搭建虚拟机或VPS安装 Redis 外,也推荐你直接使用[新浪云](http://t.cn/RbsUCkH)来部署环境,更方便快捷,注册账号赠送的云豆足够免费使用到学习完整本书的内容。 ### 1.1 第一次安装 先使用 curl 下载 MongoDB 安装包,解压缩之后放到`/usr/local`目录下 ~~~ curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-amazon-3.4.5.tgz tar -zxvf mongodb-linux-x86_64-amazon-3.4.5.tgz mv mongodb-linux-x86_64-amazon-3.4.5/ /usr/local/mongodb ~~~ ### 1.2 加入环境变量中 ~~~ export PATH=/usr/local/mongodb/bin:$PATH ~~~ ### 1.3 创建数据库目录 MongoDB 默认的数据存储目录是`/data/db`,需要手动创建 ~~~ mkdir -p /data/db ~~~ 如果你不想把 MongoDB 的数据存储在`/data/db`文件夹下,可以在启动 MongoDB 的时候通过`--dbpath`参数来指定。 ### 1.4 启动 MongoDB 服务 ~~~ $ > mongod # 指定数据存储目录 $ > mongod --dbpath=/home/db ~~~ ### 1.5 管理 Mongodb ~~~ $ > mongo ~~~ 执行 mongo 命令文件启动 MongoDB Shell,MongoDB Shell 是 MongoDB 自带的交互式 Shell,是 JavaScript Shell,支持一些 JavaScript 的语法和算术运算。 也可以在启动 MongoDB 服务的时候增加参数`--rest` 来启用 web 图形界面来管理 MongoDB。默认的 MongoDB 的默认端口是 27017。默认的 web 图形界面的访问端口是默认端口加1000,即 28017。访问地址就是`http://ip:28017`。 > 在生产环境中并不推荐使用 web 图形界面来维护数据 ## 2. MongoDB 和 ThinkPHP5 的第一次相遇 在通过 PHP 来使用 MongoDB 之前需要先安装 PECL 拓展。 目前,MongoDB 在 PHP 有两个拓展,分别是`mongo` 和 `mongodb` 1. `mongo` 拓展仅支持php5.3-5.6之间版本,并且目前已经停止更新 ~~~ http://pecl.php.net/package/mongo ~~~ 2. `mongodb`拓展支持php5.4-php7.x之间版本,推荐使用这个拓展 ~~~ http://pecl.php.net/package/mongodb ~~~ > ThinkPHP5 使用的是`mongodb`拓展,想要使用ThinkPHP5 官方 MongoDB 驱动必须要安装`mongodb`拓展 使用pecl 命令来安装 mongodb 拓展 ~~~ $ > pecl install mongodb ~~~ 通过`php --ri`来确认拓展是否安装成功 ~~~ $ > php --ri mongodb ~~~ ThinkPHP5 官方提供了 MongoDB 驱动,可以直接通过 Composer 安装。 ~~~ composer require topthink/think-mongo ~~~ 修改配置文件(application/database.php) 将type属性修改为`mongodb`即可 ~~~ 'type' => '\think\mongo\Connection', ~~~ 然后就可以使用 ThinkPHP5 的 Db 方法或者模型来使用 MongoDB 数据库了 ~~~ <?php $arr = Db::table('test_db')->select(); halt($arr); ~~~ > MongoDB并没有表的概念,取而代之的是集合。熟悉关系型数据库的朋友可以直接把集合理解成表