一、MongoDB简介

MongoDB (名称来自"humongous") 是一个可扩展的、高性能、开源、模式自由、面向文档的数据库,集文档数据库、键值对存储和关系型数据库的优点于一身。

官方站点: https://www.mongodb.org

 

MongoDB特点:

• 面向文档存储(类JSON数据模式简单而强大)
• 动态查询
• 全索引支持,扩展到内部对象和内嵌数组
• 查询记录分析
• 快速,就地更新
• 高效存储二进制大对象 (比如照片和视频)
• 复制和故障切换支持
• Auto-Sharding自动分片支持云级扩展性
• MapReduce 支持复杂聚合
• 商业支持,培训和咨询

 

二、安装MongoDB

安装MongoDB非常的简单,仅需下载压缩包解压运行命令即可

下载地址: https://www.mongodb.org/downloads

本文为windows平台,MongoDB运行命令:>bin/mongod

提示:首先要创建存储数据的文件夹,MongoDB 默认存储数据目录为 /data/db/ (或者 c:\data\db),当然你也可以修改成不同目录,只需要指定 --dbpath 参数,

示例:
>bin/mongod --dbpath=d:\mgdata\db

更多请参看我的CSDN博客:MongoDB 安装配置

 

三、安装MongoDB PHP扩展

根据自己的PHP版本下载PHP扩展:

http://php.net/manual/en/mongo.installation.php#mongo.installation.nix
http://www.php.net/manual/en/mongo.installation.php#mongo.installation.windows

提示:
1、VC6适合Apache、VC9适合IIS;
2、Thread safe适合PHP以模块运行方式、Non-thread safe适合CGI运行方式。
修改php.ini,加入:extension=php_mongo.dll,重启Web服务器。

Ubuntu安装步骤:

1. 下载插件: mongo-php-driver

2. 解压安装:

$ tar zxvf mongodb-mongodb-php-driver-<commit_id>.tar.gz
$ cd mongodb-mongodb-php-driver-<commit_id>
$ phpize
$ ./configure
$ make all
$ sudo make install

3.  配置php.ini     

#extension=uploadprogress.so
#extension=http.so
#extension=intl.so
#extension=curl.so

extension=/usr/lib/php5/20121212/curl.so
extension=/usr/lib/php5/20121212/gd.so
extension=/usr/lib/php5/20121212/json.so
extension=/usr/lib/php5/20121212/mysql.so
extension=/usr/lib/php5/20121212/mysqli.so
#extension=/usr/lib/php5/20121212/opcache.so
extension=/usr/lib/php5/20121212/pdo.so
extension=/usr/lib/php5/20121212/pdo_mysql.so
#extension=/usr/lib/php5/20121212/readline.so
#extension=/usr/lib/php5/20121212/xdebug.so
extension=/usr/local/lib/php/extensions/no-debug-non-zts-20121212/redis.so

extension=/usr/local/lib/php/extensions/no-debug-non-zts-20121212/mongo.so

4. 重启apache

sudo  /etc/init.d/apache2  restart

5. 修改默认启动项目(可选

sudo  vim  /etc/apache2/apache2.conf

添加配置代码如下:

<VirtualHost *:80>
	ServerAdmin webmaster@localhost
	DocumentRoot /home/homer/workspace
        <Directory /home/homer/workspace/money_client>
                DirectoryIndex index.html index.php
        	Options Indexes FollowSymLinks
        	AllowOverride None
        	Require all granted
        </Directory>
        ServerName localhost
        DirectoryIndex index.html index.php
	ErrorLog ${APACHE_LOG_DIR}/error_alibuyer.log
	CustomLog ${APACHE_LOG_DIR}/access_alibuyer.log combined
</VirtualHost>

 

四、PHP示例

1、连接Mongo服务器

<?php  
	$conn = new Mongo();  					// 连接localhost:27017
	$conn = new Mongo('test.com');  		// 连接远程主机默认端口 
	$conn = new Mongo('test.com:22011');  	//连接远程主机22011端口

	// MongoDB有用户名密码
	$conn = new Mongo("mongodb://${username}:${password}@localhost");	

	// MongoDB有用户名密码并指定数据库blog  
	$conn = new Mongo("mongodb://${username}:${password}@localhost/blog");
  
  	// 多个服务器
	$conn = new Mongo("mongodb://localhost:27017,localhost:27018");  	
?>

或者使用 MongoClient()

<?php
	$MONGO_SERVER = array(	'host'=>'10.123.55.16',
							'port'=>27017,
							'dbname'=>'mimvp_money',
							'user'=>'',
							'pwd'=>'');

	$count = $coll->count();
	print("count: " . $count);
	
	$host_port = $MONGO_SERVER['host'] . ":" . $MONGO_SERVER['port'];		// '10.123.55.16:20517'
	
	$conn = new MongoClient($host_port);
	$db = $conn->selectDB($MONGO_SERVER['dbname']);
	$coll = new MongoCollection($db, $connName);
	$conn->close();
?>

 

2、指定数据库和数据集名(表名)

<?php  
	$db = $conn->blog;  			// 选择数据库blog
	$collection = $db->users;  		// 制定结果集(表名:users)
?> 

 

3、CRUD 操作

<?php  
	$user = array('name' => 'caleng', 'email' => 'admin@admin.com');  			// 新增 
	$collection->insert($user);  
  
	$newdata = array('$set' => array("email" => "test@test.com"));  			// 修改
	$collection->update(array("name" => "caleng"), $newdata);  
  
	$collection->remove(array('name'=>'caleng'), array("justOne" => true));  	// 删除
 
	$cursor = $collection->find();  		// 查找 
	var_dump($cursor);  
  
	$user = $collection->findOne(array('name' => 'caleng'), array('email'));  	// 查找一条
	var_dump($user);  
?>

 

4、关闭连接

<?php  
	$conn->close();  
?>

 

五、示例代码

<?php 
	//这里采用默认连接本机的27017端口,当然你也可以连接远程主机如192.168.0.4:27017,如果端口是27017,端口可以省略 
	$m = new Mongo(); 

	// 选择comedy数据库,如果以前没该数据库会自动创建,也可以用$m->selectDB("comedy"); 
	$db = $m->comedy; 

	//选择comedy里面的collection集合,相当于RDBMS里面的表,也-可以使用 
	$collection = $db->collection; 
	$db->selectCollection("collection");
 
	//添加一个元素 
	$obj = array( "title" => "Calvin and Hobbes-".date('i:s'), "author" => "Bill Watterson" ); 

	//将$obj 添加到$collection 集合中 
	$collection->insert($obj); 

	//添加另一个元素 
	$obj = array( "title" => "XKCD-".date('i:s'), "online" => true ); 
	$collection->insert($obj); 

	//查询所有的记录 
	$cursor = $collection->find(); 

	//遍历所有集合中的文档 
	foreach ($cursor as $obj) 
	{ 
		echo $obj["title"] . "<br />\n"; 
	} 

	//删除所有数据 
	//$collection->remove(); 

	//删除 name 为hm 
	//$collection->remove(array('name'=>'hm')); 

	//断开MongoDB连接 
	$m->close(); 
?> 

 

参考推荐:

PHP 常见错误处理

MongoDB 的php 驱动的安装

MongoDB安装以及php_mongo扩展的安装

MongoDB 慢查询状态监控

pymongo 连接MongoDB的几种方式