mongodb是一款经典的nosql数据库,在庞大的业务体系中,我们经常会要求我们的数据库系统端有多条可选的数据库分支,使得不同的数据库系统能够满足不同种类的业务需求。比如有密集型高并发的需求,快速响应的需求,大量持久存储的需求等等。mongodb性能非常好,很好地支持了高用户量的需求,目前很多数据库系统在使用它。
安装:
mongodb下载地址
安装好mongodb之后,打开控制台cmd(windows系统)进入安装目录,输入命令启动mongod.exe(mongodb的服务程序,监听对db的访问)
mongod
********************************************************************* ERROR: dbpath (\data\db\) does not exist. Create this directory or give existing directory in --dbpath. See http://dochub.mongodb.org/core/startingandstoppingmongo *********************************************************************
mongod --dbpath d:/data/db启动成功后,会告诉你
waiting for connections on port 2701727017是mongodb的默认监听接口,此时你在地址栏中输入
http://127.0.0.1:27017/如果浏览器返回
It looks like you are trying to access MongoDB over HTTP on the native driver port.并且控制台有了相应的反应,说明你启动成功了。
数据库管理:
现在我们已经启动了mongodb服务,怎么使用数据库呢?
当然,我们可以简单地再开启一个控制台cmd,再进入mongodb的安装目录下启动mongo
mongo这样,你就可以在shell界面操作你的数据了
C:\Program Files\MongoDB 2.6 Standard\bin>mongo MongoDB shell version: 2.6.3 connecting to: test >显示如此,说明连接成功并且开启了shell操作的功能。
你可以在这里看到怎样操作mongodb,以及另一个中文的介绍常用mongoDB命令。
和其他数据库一样,我们有更好的图形界面了帮助我们管理mongodb数据库,在这里介绍一款Robomongo软件,
官网下载地址 如果你不能使用这个链接,点击下载一个0.8.4版本
启动Robomongo,File->Connect,在MongoDB Connections窗口点击create新建一个数据库系统连接。
在Connection界面:address写上localhost(如果你定向到本地的话,或者127.0.0.1),端口就是27017。
在Authentication界面:
这里要注意的一点,mongodb默认不开启用户验证,在不开启用户验证的情况下,不需要登陆用户和用户验证即可访问数据库,如果你不需要使用用户验证,只想先测试一下数据库,就不要勾选Perform authentication,然后连接即可。
但如果你想进行用户验证,你要保证在数据库系统的管理员数据库admin中有一个可用的账号(否则还是不会开启用户验证,没有账号你怎么获得所有权限呢),并且在启动mongodb服务时,在启动参数里加上"--auth":
>mongod --dbpath d:/data/db --auth此时勾选Perform authentication,并输入正确的账号密码,然后选择连接。
PS:你可以先不使用用户验证,在admin新建账号密码,重新用开启用户验证的方式启动mongod。
在Robomongo中,你可以右键一个数据库开启它的shell,然后在shell中输入命令Ctrl+Enter运行,这部分就和shell中的命令一样,你可以做所有你想要做的操作,其他方便的操作等待你去挖掘。
Laravel中使用mongodb:
如果你安装mongodb是为了在Laravel中使用,请先参考laravel手册
在app/confi/database.php中,'connections'数组里我们添加一项mongodb的条目,表明我们的数据库系统架构里支持mongodb,并且定义它的连接方式:
'connections' => array( 'mongodb' => array( 'driver' => 'mongodb', 'host' => 'localhost', 'port' => 27017, 'username' => 'picroot', 'password' => 'picroot', 'database' => 'picmongo', ), ),
PS:如果需要将mongo设置为首选数据库,可以更改'default'选项。
除了在config配置数据库,还要配置我们的php组件,扩展我们的php以使用mongo。
下载对应版本的php_mongo.dll,参考安装手册 ,确认你的php版本,下载对应的dll组件,更名为php_mongo.dll,放入php的ext目中(如果你没有更改php默认的extension目录,那就是ext目录),并在php.ini中加入一行:
extension=php_mongo.dll重新启动你的服务。为了验证我们是否配置成功,我在项目新建了数据库迁移,这部分知识可以参考 laravel手册:
<?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateLikecountTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { // Schema::connection('mongodb')->create('count', function(Blueprint $table){ $table->increments('id'); $table->unsignedInteger('picture_id'); $table->unsignedInteger('count'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { // Schema::drop('count'); } }运行迁移命令,如果一切正常(包括正确的反馈信息,在数据库中成功创建表),则证明我们一切配置工作都已完成,可以轻松在laravel中使用mongodb了。
建议:
如果你不是很了解laravel中多数据库系统操作的话:
1.不建议,但可以使用:每次使用前选择连接(当连接非默认数据库时):
DB::connection
其实这种写法并不是很好管理,还容易出错,连接后不及时disconnection的话,还可能占据冗余但不使用的数据库连接,对系统资源是一个浪费。
2.建议:对所有使用数据库的Eloquent设定默认的数据库连接:
class YourEloquent extends Eloquent { protected $connection = 'mongodb'; ... ... }
对于那些一个模型使用两种链接的情况,笔者建议你将模型拆分(往往不同业务需求的数据库连接同样反映了在逻辑上这个模型是容易拆分的),使得每个模型应用一个数据库连接,不仅方便数据库迁移和回滚,也方便理解业务逻辑。