整体步骤:
- 下载数据库文件
- 安装数据库
- 下载php扩展dll
- 加入php扩展
一,下载
1.官网为:http://www.mongodb.org/;下载安装程序的地址为:http://www.mongodb.org/downloads,选择选择的是Windows 32-bit 1.8.1版本。
2.下载MongoDB For .net 驱动开发包,官方的c#driver位于driver菜单下,地址为:https://github.com/mongodb/mongo-csharp-driver/downloads。这里还了解到有samus驱动下载地址:https://github.com/samus/mongodb-csharp
二,安装
1.将mongodb-win32-i386-1.8.1.zip解压到目录D:Program Filesmongodb_1.8.1,也就是把Bin目录放在该文件夹下。
2.在D:Program Filesmongodb_1.8.1创建Data文件夹,然后在该目录下分别创建db,log两个文件夹,至此D:Program Filesmongodb_1.8.1文件目录下有三个文件夹(bin,db,log).
3.在log文件夹下创建一个日志文件MongoDB.log,即完全目录为:D:Program Filesmongodb_1.8.1logMongoDB.log.
4. 程序启动方式
运行cmd.exe 进入DOS命中界面
> cd D:Program Filesmongodb_1.8.1in
> D:Program Filesmongodb_1.8.1in>mongod -dbpath "D:Program Filesmongodb_1.8.1datadb"
执行此命令即将mongodb的数据库文件创建到C:Program Filesmongodbdatadb 目录,不出意外的会看到命令最后一行sucess的成功提示
此时数据库就已启动,该界面为Mongo的启动程序,关闭后可直接双击bin下的mongod.exe (注意是d,这个是启动程序)
启动程序开启后,再运行mongo.exe 程序(注意没有d)
测试数据库操作
>help (查看相关信息)
>db.foo.insert({a:1}) (往foo表插入a,1字段值,foo表为默认表)
>db.foo.find() (查看foo表数据)
可以看到插入了3条记录分别人a,cctv,set 。
当mongod.exe被关闭时,mongo.exe 就无法连接到数据库了,因此每次想使用mongodb数据库都要开启mongod.exe程序,所以比较麻烦,接下来我们将
MongoDB安装为windows服务吧
5. windows service方式
运行cmd.exe
> cd D:Program Filesmongodb_1.8.1in
> D:Program Filesmongodb_1.8.1in>mongod --dbpath "D:Program Filesmongodb_1.8.1datadb" --logpath "D:Program Filesmongodb_1.8.1bdatalogMongoDB.log" --install --serviceName "MongoDB"
这里MongoDB.log就是开始建立的日志文件,--serviceName "MongoDB" 服务名为MongoDB
引时服务已经安装成功,运行
>NET START MongoDB (开启服务)
>NET stop MongoDB (关闭服务)
我的操作
> D:Program Filesmongodb-win32-i386-2.2.2in>mongod --dbpath "D:Program Filesmongodb-win32-i386-2.2.2db" --logpath "D:Program Filesmongodb-win32-i386-2.2.2logMongoDB.log" --install --serviceName "MongoDB"
删除服务
> D:Program Filesmongodb-win32-i386-2.2.2in>mongod --dbpath "D:Program Filesmongodb-win32-i386-2.2.2datadb" --logpath "D:Program Filesmongodb-win32-i386-2.2.2logMongoDB.log" --remove --serviceName "MongoDB" (删除,注意不是--install了)
其它命令可查阅help命令或官网说明。
查看服务
运行bin文件夹下mongo.exe 客户端测试一下吧。测试同4相同 。
到此安装就完成了。
加入php扩展(根据自己的系统,选择相应的扩展库)
http://www.php.net/manual/zh/mongo.installation.php#mongo.installation.windows
根据php的版本,copy目录php_mongo-1.3.1下相应的版本到php目录的ext下面
然后在php.ini中引入扩展extension=php_mongo.dll
Linux下,则下载http://downloads-distro.mongodb.org/repo/redhat/os/
加入:extension=mongo.so
我使用的是cakephp,直接在git下载插件,附带有例子
git地址https://github.com/ichikaway/cakephp-mongodb
使用操作
下载文件,放到/plugins,可以直接下载zip,也可以用git命令下载(git clone git://github.com/ichikaway/cakephp-mongodb.git Mongodb)
然后在//app/Config/bootstrap.php中引入此插件
CakePlugin::load('Mongodb');
再修改数据库
// app/Config/database.php
class DATABASE_CONFIG {
public $default = array(
'datasource' => 'Mongodb.MongodbSource',
'host' => 'localhost',
'database' => 'blog',
'port' => 27017,
'prefix' => '',
'persistent' => 'true',
/* optional auth fields
'login' => 'mongo',
'password' => 'awesomeness',
'replicaset' => array('host' => 'mongodb://hoge:hogehoge@localhost:27021,localhost:27022/blog',
'options' => array('replicaSet' => 'myRepl')
),
*/
);
// To make sure all tests are passing create the following entry in app/Config/database.php
public $test = array(
'datasource' => 'Mongodb.MongodbSource',
'database' => 'test_mongo',
'host' => 'localhost',
'port' => 27017,
);
引入完成,下载可以把下载文件中samples目录下的model,controller,view分别复制到/app下的这三个目录
MongoDB命令及SQL语法对比
官网说明文档:http://docs.mongodb.org/manual/reference/command/
mongodb与mysql命令对比传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。
MySQL |
MongoDB |
说明 |
mysqld |
mongod |
服务器守护进程 |
mysql |
mongo |
客户端工具 |
mysqldump |
mongodump |
逻辑备份工具 |
mysql |
mongorestore |
逻辑恢复工具 |
|
db.repairDatabase() |
修复数据库 |
mysqldump |
mongoexport |
数据导出工具 |
source |
mongoimport |
数据导入工具 |
grant * privileges on *.* to … |
Db.addUser() Db.auth() |
新建用户并权限 |
show databases |
show dbs |
显示库列表 |
Show tables |
Show collections |
显示表列表 |
Show slave status |
Rs.status |
查询主从状态 |
Create table users(a int, b int) |
db.createCollection("mycoll", {capped:true, size:100000}) 另:可隐式创建表。 |
创建表 |
Create INDEX idxname ON users(name) |
db.users.ensureIndex({name:1}) |
创建索引 |
Create INDEX idxname ON users(name,ts DESC) |
db.users.ensureIndex({name:1,ts:-1}) |
创建索引 |
Insert into users values(1, 1) |
db.users.insert({a:1, b:1}) |
插入记录 |
Select a, b from users |
db.users.find({},{a:1, b:1}) |
查询表 |
Select * from users |
db.users.find() |
查询表 |
Select * from users where age=33 |
db.users.find({age:33}) |
条件查询 |
Select a, b from users where age=33 |
db.users.find({age:33},{a:1, b:1}) |
条件查询 |
select * from users where age<33 |
db.users.find({'age':{$lt:33}}) |
条件查询 |
select * from users where age>33 and age<=40 |
db.users.find({'age':{$gt:33,$lte:40}}) |
条件查询 |
select * from users where a=1 and b='q' |
db.users.find({a:1,b:'q'}) |
条件查询 |
select * from users where a=1 or b=2 |
db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } ) |
条件查询 |
select * from users limit 1 |
db.users.findOne() |
条件查询 |
select * from users where name like "%Joe%" |
db.users.find({name:/Joe/}) |
模糊查询 |
select * from users where name like "Joe%" |
db.users.find({name:/^Joe/}) |
模糊查询 |
select count(1) from users |
Db.users.count() |
获取表记录数 |
select count(1) from users where age>30 |
db.users.find({age: {'$gt': 30}}).count() |
获取表记录数 |
select DISTINCT last_name from users |
db.users.distinct('last_name') |
去掉重复值 |
select * from users ORDER BY name |
db.users.find().sort({name:1}) |
排序 |
select * from users ORDER BY name DESC |
db.users.find().sort({name:-1}) |
排序 |
EXPLAIN select * from users where z=3 |
db.users.find({z:3}).explain() |
获取存储路径 |
update users set a=1 where b='q' |
db.users.update({b:'q'}, {$set:{a:1}}, false, true) |
更新记录 |
update users set a=a+2 where b='q' |
db.users.update({b:'q'}, {$inc:{a:2}}, false, true) |
更新记录 |
delete from users where z="abc" |
db.users.remove({z:'abc'}) |
删除记录 |
|
db. users.remove() |
删除所有的记录 |
drop database IF EXISTS test; |
use test db.dropDatabase() |
删除数据库 |
drop table IF EXISTS test; |
db.mytable.drop() |
删除表/collection |
|
db.addUser('test’, ’test’) |
添加用户 readOnly-->false |
|
db.addUser('test’, ’test’, true) |
添加用户 readOnly-->true |
|
db.addUser("test","test222") |
更改密码 |
|
db.system.users.remove({user:"test"}) 或者db.removeUser('test') |
删除用户 |
|
use admin |
超级用户 |
|
db.auth('test’, 'test’) |
用户授权 |
|
db.system.users.find() |
查看用户列表 |
|
show users |
查看所有用户 |
|
db.printCollectionStats() |
查看各collection的状态 |
|
db.printReplicationInfo() |
查看主从复制状态 |
|
show profile |
查看profiling |
|
db.copyDatabase('mail_addr','mail_addr_tmp') |
拷贝数据库 |
|
db.users.dataSize() |
查看collection数据的大小 |
|
db. users.totalIndexSize() |
查询索引的大小 |
mongodb语法
MongoDB的好处挺多的,比如多列索引,查询时可以用一些统计函数,支持多条件查询,但是目前多表查询是不支持的,可以想办法通过数据冗余来解决多表查询的问题。
MongoDB对数据的操作很丰富,下面做一些举例说明,内容大部分来自官方文档,另外有部分为自己理解。
查询colls所有数据
db.colls.find() //select * from colls
通过指定条件查询
db.colls.find({'last_name’: 'Smith’});//select * from colls where last_name=’Smith’
指定多条件查询
db.colls.find( { x : 3, y : “foo” } );//select * from colls where x=3 and y=’foo’
指定条件范围查询
db.colls.find({j: {$ne: 3}, k: {$gt: 10} });//select * from colls where j!=3 and k>10
查询不包括某内容
db.colls.find({}, {a:0});//查询除a为0外的所有数据
支持<, <=, >, >=查询,需用符号替代分别为$lt,$lte,$gt,$gte
db.colls.find({ “field” : { $gt: value } } );
db.colls.find({ “field” : { $lt: value } } );
db.colls.find({ “field” : { $gte: value } } );
db.colls.find({ “field” : { $lte: value } } );
也可对某一字段做范围查询
db.colls.find({ “field” : { $gt: value1, $lt: value2 } } );
不等于查询用字符$ne
db.colls.find( { x : { $ne : 3 } } );