MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库。它们各有各的优点,关键是看用在什么地方。所以我们所熟知的那些SQL(全称Structured Query Language)语句就不适用于MongoDB了,因为SQL语句是关系型数据库的标准语言。
我们在开发过程中,经常使用PHP来操作MySQL数据库,那么如何使用PHP来操作MongoDB数据库呢?下面来着重介绍MongoDB数据库及PHP操作MongoDB数据库。
一、MongoDB简介
MongoDB (名称来自”humongous”) 是一个可扩展的、高性能、开源、模式自由、面向文档的数据库,集文档数据库、键值对存储和关系型数据库的优点于一身。
MongoDB特点:
• 面向文档存储(类JSON数据模式简单而强大)
• 动态查询
• 全索引支持,扩展到内部对象和内嵌数组
• 查询记录分析
• 快速,就地更新
• 高效存储二进制大对象 (比如照片和视频)
• 复制和故障切换支持
• Auto-Sharding自动分片支持云级扩展性
• MapReduce 支持复杂聚合
• 商业支持,培训和咨询
二、安装MongoDB
安装MongoDB非常的简单,仅需下载压缩包解压运行命令即可
下载地址: https://www.mongodb.org/downloads
本文为windows平台,MongoDB运行命令:>bin/mongod
提示:首先要创建存储数据的文件夹,MongoDB 默认存储数据目录为 /data/db/ (或者 c:\data\db),当然你也可以修改成不同目录,只需要指定 –dbpath 参数。
三、安装MongoDB PHP扩展
根据自己的PHP版本下载PHP扩展:
//php.net/manual/en/mongo.installation.php#mongo.installation.nix
//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
四、对比MongoDB和MySQL的操作:
mongodb以BSON结构(二进制)进行存储,对海量数据存储有着很明显的优势。下面是Mongodb与Mysql的操作命令的对比。
作用MySQLMongoDB
服务器守护进程mysqldmongod
客户端工具mongomysql
逻辑备份工具mysqldumpmongodump
逻辑还原工具mysqlmongorestore
数据导出工具mysqldumpmongoexport
数据导入工具sourcemongoimport
新建用户并授权grant all on *.* to username@ 'localhost' identified by 'passwd';db.addUser("user","psw")
db.auth("user","psw")
显示库列表show databases;show dbs
进去库use dbname;use dbname
显示表列表show tables;show collections
查询主从状态show slave status;rs.status
创建库
创建表create database name;
create table tname(id int);无需单独创建,直接use进去
无需单独创建,直接插入数据
删除表drop table tname;db.tname.drop()
删除库drop database dbname;首先进去该库,db.dropDatabase()
插入记录insert into tname(id) value(2);db.tname.insert({id:2})
删除记录delete from tname where id=2;db.tname.remove({id:2})
修改/更新记录update tname set id=3
where id=2;db.tname.update({id:2},
{$set:{id:3}},false,true)
查询所有记录select * from tname;db.tname.find()
查询所有列select id from tname;db.tname.find({},{id:1})
条件查询select * from tname where id=2;db.tname.find({id:2})
条件查询select * from tname where id < 2;db.tname.find({id:{$lt:2}})
条件查询select * from tname where id >=2;db.tname.find({id:{$gte:2}})
条件查询select * from tname where id=2
and name='steve';db.tname.find({id:2, name:'steve'})
条件查询select * from tname where id=2
or name='steve';db.tname.find($or:[{id:2},
{name:'steve'}])
条件查询select * from tname limit 1;db.tname.findOne()
模糊查询select * from tname where name like "%ste%"db.tname.find({name:/ste/})
模糊查询select * from tname where name
like "ste%";db.tname.find({name:/^ste/})
获取表记录数select count(id) from tname;db.tname.count()
获取有条件的记录数select count(id) from tname where id=2;db.tname.find({id:2}).count()
查询时去掉重复值select distinct(last_name) from tname;db.tname.distinct('last_name')
正排序查询select *from tname order by id;db.tname.find().sort({id:1})
逆排序查询select *from tname order by id desc;db.tname.find().sort({id:-1})
取存储路径explain select * from tname where id=3;db.tname.find({id=3}).explain()
HTML5热点新闻
前端开发技术库