mongodb

来源:互联网 发布:固态硬盘克隆软件 编辑:程序博客网 时间:2024/05/22 08:18

一、简介

1、是什么:MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的,语法有点类似javascript面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库。


2、特点:它的特点是高性能、易部署、易使用,存储数据非常方便。适用于大存储、高并发的网站


3、概述

(1)主要目标:高的性能,扩展强(分布式存储)

(2)面向文档的数据库

(4)以bson格式存储数据

(5)javascript作为操作语言

(6)支持多种语言:php python java c++等

(7)支持GridFs(大文件存储)

4、mongodb与mysql性能比较


5、应用范围和限制

不支持连表查询,不支持sql语句,不支持事务存储过程等,所以不适合存储数据间关系比较复杂的数据,一般主要是当做一个数据仓库来使用。

适用于:日志系统,股票数据,等。


二、概念

1、文档

是mongoDB中数据的基本单元,类似关系数据库的行, 

多个键值对有序地放置在一起便是文档。

{1:值1,2:值2,键3:值3……………}

{ “username”:”Tom”, “age”:10 }

{ "username":"Tom" , "age" : "10" } 

{“Username”:”Tom”,”age”:10} 

注意:

①.以上是3个不同的文档,MongoDB区分大小写的数据类型,第一个age字段是数字类型,第二个age字符串类型。

②. 每一个文档尺寸不能超过16M 


2、集合

多个文档形成一个集合,集合就类似于关系型数据库里面的表。

无模式是指,在同一个集合中可以包含不同格式的文档,如:

{   "Name" : "Mongodb" ,  "Type" : "Nosql"  }

{   "UserName" : "Tom"  ,  "age"  :  20  ,  "Gender"  :  "male"  }

以上两个文档可以放在同一个集合中。

Mysql需要先建表再插入数据, 

模式自由(schema-free):意思是集合里面没有行和列的概念, 

MongoDB中的集合不用创建、没有结构,所以可以放不同格式的文档。


3、数据库

多个集合可以组成数据库。一个mongoDB实例可以承载多个数据库,他们之间完全独立。 

Mongodb中的数据库和Mysql中的数据为概念类似,只是无需创建。

一个数据库中可以有多个集合。

一个集合中可以有多个文档。


三、安装软件和卸载

1、把解压的的文件(mongodb)拷贝到指定的目录,最好是wamp目录下,以方便管理

2、新建一个data目录用于存储数据库文件,新建一个log.txt文档用于存储日志信息

3、以管理员的身份进入dos窗口,进入mongodb的bin目录下
4、使用mongod.exe 执行安装命令:mongod  --install  --logpath 指定日志文件(全路径)--dbpath 指定数据库文件存储目录
如:f:\server\mongodb\bin>mongod --install --logpath f:/server/mongodb/log.txt --dbpath f:/server/mongodb/data

说明:也可以使用会话级别无需安装直接启动mongod(在语法上少了--install)

f:\server\mongodb\bin>mongod  --logpath f:/server/mongodb/log.txt --dbpath f:/server/mongodb/data


5、安装完之后启动服务:net start mongodb,也可以通过服务界面开启

6、使用mongo.exe客户端连接mongodb服务器mongo  localhost  27017

7、卸载:在bin目录下执行:mongod  --remove


四、入门语句

1、创建数据库

语法:use 数据库名称

如:> Use user


2、创建集合(相当于sql表)

语法:db.集合名.insert({1:值1……})


3、查看数据库:show dbs


4、查看集合:show tables


5、删除集合

语法:db.集合名.drop()

如:> db.php.drop()


6、删除数据库:语法: db.dropDatabase()


7、查看帮助:help、db.help()、db.php.help()


8、for

> for(var i=1;i<9;i++){

... db.java.insert({name:"java"+i,dire:"web"+i})

... }


9常用操作符:

$lt , $lte , $gt , $gte   ( < , <= , > , >= ), $ne ( <> ) ,$in , $nin ,  $or ,  $not, $mod (取模),  $exists, $where 

操作符用法:

如: 查询年龄小于20岁的用户

db.user.find( {"age" : { "$lt" : 20 } } )

db.php.remove({age:{‘$gt’:7}})


五、基本操作

1、添加文档

语法:db.集合名.insert({1:值1,键2:值2………..})

> db.php.insert({name:"xiaoliang",age:22,address:"guangzhou"})

> db.php.insert({name:"xiaoli",age:16,address:"muye"},{name:"woailuo",age:16,address:"sharen"})

2、删除文档

语法:db.集合名.remove({条件})   注意:如果不加条件,则删除所有的文档。

案例1:比如要删除年龄等于5的文档

db.php.remove({age:5})

案例2:要删除年龄大于7的文档

db.php.remove({age:>7})

3、修改文档

语法:db.集合名.update({条件},{新的文档})

案例1:比如把年龄等于22的文档的name改为 “xiaoshui”

>db.php.update({age:22},{name:'xialshui'})

案例2:使用修改器完成,把年龄等于3的文档的name改为 “xiaosan”,并且不能丢失其他的键值。

>db.php.update({age:16},{'$set':{name:'Shikamaru'}})

4、查看文档

(1)基本语法

db.集合名.find({条件})

案例1:查寻i等于5的文档

db.php.find({i:5})

案例2:查询i大于5的文档

>db.php.find({i:{'$gt':5}})

(2)count 数量

案例3:查询集合里面文档的数量

db.php.count(),也可加find()查询满足条件的数量

> db.php.count()

> db.php.find({i:{'$gt':5}}).count()

(3)sort 排序

案例4:根据年龄降序查询文档

db.集合名.find().sort({age:1})根据年龄升序 

db.集合名.find().sort({age:-1})根据年龄降序

> db.php.find().sort({i:1}) 根据i升序 

> db.php.find().sort({i:-1}) 根据i降序 

(4)limit   

案例5:取出前5个文档

语法:db.集合名.find().limit(5)

> db.php.find().limit(3);

5skip  偏移量

案例6:取出第2个到第5个文档。   类似于mysql   limit 偏移量 取出的数量

语法:db.集合名.find().skip(偏移量).limit(取出的数量)

>db.php.find().skip(3).limit(3); 从第三条记录开始,查询出3



六、权限验证

Mongodb权限范围说明

① 普通用户:mongodb里面的用户是属于某个数据库的,某个数据库的用户登录后只能操作所属的数据库。

② 超级用户:可以操作其他数据库和删除其他用户

1、添加用户

(1)步骤:

1)选择数据库:use  数据库     

2开始增加用户:db.addUser(用户名,密码,是否只读)   

如果为ture是只读,则该用户只能查询,无法修改。默认是 false,可以读写的。

(2)前提

在给数据库设置用户密码时,要必须先设置一个超级管理员。

添加超级管理员:

> use admin

> db.addUser(‘root’,’123456’)

user数据库添加一个管理员

> use user

> db.addUser(‘user’,’123456’)

2、权限验证生效

(1)注意:

要使用权限验证(卸载服务重新安装),如果是安装成window的一个服务则要重新安装,在重新安装时,添加一个选项--auth   (--auth 表示要使用权限验证

如果是直接启动的方式来启动mongodb的,则重新启动,在启动时,添加 --auth选项。 

f:\server\mongodb\bin>mongod --logpath f:/server/mongodb/log.txt --dbpath f:/server/mongodb/data --auth

(2)验证语法:

1use  数据库

2db.auth(用户名,密码)

> use user

> db.auth('user',123456)

3、查看用户

在那个数据库就能看到该用户的用户信息

> db.system.users.find()

4、删除用户

如果想要删除用户,则把system.users集合里面的用户对应的文档删除即可。

Db.system.users.remove({user:’xiaoliang’})


总结:

(1)非admin数据库的用户不能使用数据库命令,比如show dbs等。 

(2)admin数据库中的用户被视为超级用户(即管理员)。在认证之后,管理员可以读写所有数据库,执行特定的管理命令, 

(3)在开启安全检查之前,一定要至少有个管理员账号。 

(4)数据库的用户账号以文档的形式存储在system.users集合里面。可以在system.users集合中删掉用户账号文档,就可以删除用户。 



七、php操作mysql


安装合适的扩展

下载合适的php_mongodb.dll文件。 

(1)php的版本 

(2)是否是线程安全的thread safe(ts)

(3)是vc几的 

(4)php是32位的还是64位的。‘

2、把合适的扩展拷贝到php的安装目录的ext目录里面。

3、打开php.ini文件,引入该扩展:extension=php_mongo.dll

4、重启apache之后通过phpinfo()查看是否有mongo信息

入门使用:

(1)连接mongodb

//$m = new Mongo("mongodb://用户名:密码@主机地址:端口/选择数据库");

$m = new Mongo("mongodb://user:123456@localhost:27017/user");

 

(2)选择要操作的数据库

$db = $m -> selectDb("user");


(3)増删改查

在php中:

(3)増删改查

在php中:

. 换成 ->

 {}换成array()

① 添加文档(行)

//原:db.test.insert({name:'xiaoliang '})

//$db -> test -> insert(array('name'=>'xiaoliang','age'=>22));

 

② 查询

//原:db.test.find()

$data = $db -> test -> find();

foreach ($data as $d){

//echo "<pre>";

//var_dump($d);

echo $d['name'].'--'.$d['age'].'<br/>';

}

//查询age=25的文档:返回的是结果集,就算是一条数据也是一个二维数组

$data = $db -> test -> find(array('age'=>25));

//查询大于25的文档

$data = $db -> test -> find(array('age'=>array('$gt'=>25)));

foreach ($data as $d){ 

echo $d['name'].'--'.$d['age'].'<br/>';

}

 

③ 修改

//原:db.test.update({name:'user8'},{'$set':{age:288}})

$db -> test -> update(array('name'=>'user8'),array('$set'=>array('age'=>28)));

① 添加文档(行)

//原:db.test.insert({name:'xiaoliang '})

//$db -> test -> insert(array('name'=>'xiaoliang','age'=>22));

 

② 查询

//原:db.test.find()

$data = $db -> test -> find();

foreach ($data as $d){

//echo "<pre>";

//var_dump($d);

echo $d['name'].'--'.$d['age'].'<br/>';

}

//查询age=25的文档:返回的是结果集,就算是一条数据也是一个二维数组

$data = $db -> test -> find(array('age'=>25));

//查询大于25的文档

$data = $db -> test -> find(array('age'=>array('$gt'=>25)));

foreach ($data as $d){ 

echo $d['name'].'--'.$d['age'].'<br/>';

}

 

③ 修改

//原:db.test.update({name:'user8'},{'$set':{age:288}})

$db -> test -> update(array('name'=>'user8'),array('$set'=>array('age'=>28)));



把mysql的数据存储到mongodb中

header("content-type:text/html;charset=utf-8");
//连接mongodb数据库
$m = new Mongo("mongodb://user:123456@localhost:27017/user");
$db = $m -> selectDb("user");

/* 取出mysql数据 */
  mysql_connect("localhost","root","root");
mysql_query("set names utf8");
mysql_query("use ecshop");
$res = mysql_query("select * from ec_category");
while($row=mysql_fetch_assoc($res)){
//把遍历出来的数据直接添加到mongodb中 
$db -> category -> insert($row);
}


/* 查看存储到mongodb中的数据  */
$data = $db -> category -> find();
foreach($data as $d){
echo $d['id'].'--'.$d['ca_name']."<br/>";
}


0 0
原创粉丝点击