亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

PHP操作MongoDB簡明教程

標簽:
PHP

链接数据库

使用下面的代码创建一个数据库链接

<?php  
$connection = new Mongo(); //链接到 localhost:27017    
$connection = new Mongo( "example.com" ); //链接到远程主机(默认端口)    
$connection = new Mongo( "example.com:65432" ); //链接到远程主机的自定义的端口    
?>

现在你可以使用$connection链接来操作数据库了

选择数据库    
使用下面的代码来选择一个数据库

<?php  
$db = $connection->dbname;    
?>

这里的数据库并不一定是一个已经存在的数据库,如果所选择的数据库不存在,则会新建一个数据库,所以在选择数据库的时候,注意一定要填上正确的数据库名  
如果拼写错误的话,很有可能会新建一个数据库

<?php  
$db = $connection->mybiglongdbname;    
//做一些事情    
$db = $connection->mybiglongdbnme;    
//现在会连上一个新的数据库    
?>

获取一个集合    
获取一个集合跟选择数据库拥有相同的语法格式

<?php  
$db = $connection->baz;//选择数据库    
$collection = $db->foobar;//选择foobar集合    
//或者使用更简洁的方式    
$collection = $connection->baz->foobar;    
?>

插入一个文档    
多维数组是可以被储存到数据库中的基本单元    
一个随机的文档可能是这样    
<?php

$doc = array(  
”name” => “MongoDB”,    
    “type” => “database”,    
    “count” => 1,    
    “info” => (object)array( “x” => 203,    
    “y” => 102),    
    “versions” => array(“0.9.7″, “0.9.8″, “0.9.9″)    
);    
?>    
注意:你可以嵌套数组与对象,对象与文档在mongodb中几乎是一样的,你可以使用$doc调用一个文档或对象,但是info字段总是一个对象而不是一个文档,    
本约束适用于所有文档

使用MongoCollection::insert()插入一个文档  
<?php    
$m = new Mongo();    
$collection = $m->foo->bar;    
$collection->insert($doc);    
?>

使用MongoCollection::findOne()查询文档  
为了证明上面那段代码的数据已经插入到数据库里了,我们进行简单的 findOne()操作以得到集合中的第一个文档数据,这种方法只返回一个文档数据,    
这种方法适用于在你的查询语句的时候只匹配一个文档或者你只关心第一条数据

<?php  
$obj = $collection->findOne();    
var_dump( $obj );    
?>    
你会看到下列结果    
array(5) {    
  ["_id"]=>    
  object(MongoId)#6 (0) {    
  }    
  ["name"]    
  string(7) “MongoDB”    
  ["type"]=>    
  string(8) “database”    
  ["count"]=>    
  int(1)    
  ["info"]=>    
  array (2) {    
    ["x"]=>    
    int(203)    
    ["y"]=>    
    int(102)    
  }    
  ["versions"]    
  array(3) {    
    [0]=>    
    string(5) “0.9.7″    
    [1]=>    
    string(5) “0.9.8″    
    [2]=>    
    string(5) “0.9.9″    
  }    
}

注意_id字段自动加载了文档上,MongoDB储存元素中以_以及$开头的都是供内部使用的

添加更多文档    
为了做一些更有趣的事情,我们添加更多简单的文档到集合中,这些文档如下    
<?php    
array( “i” => value );    
?>

我们可以使用循环相当有效的插入数据  
<?php    
for($i=0; $i<100; $i++) {    
    $collection->insert( array( “i” => $i ) );    
}    
?>    
注意:我们可以插入不同的字段在同一字符集中,在这方面意味着MongoDB拥有非常自由的储存模式

在一个集合中计算文档的数量  
现在我们插入了101个文档(我们用循环插入了100个,之前还插入了一个),我们可以使用count()来看看我们的数据是不是都被插入进去了    
<?php    
echo $collection->count();    
?>    
这段代码将打印出101    
MongoCollection::count() 也可以查询字段数据

使用游标得到集合中的所有文档    
为了得到集合中的所有文档,我们可以使用 MongoCollection::find()方法,find()方法返回一个 MongoCursor对象,可以让我们重复得到查询    
所匹配的的文档    
<?php    
$cursor = $collection->find();    
foreach ($cursor as $id => $value) {    
    echo “$id: “;    
    var_dump( $value );    
}    
?>    
这样我们会打印出集合中的这101个文档,$id就是文档中的_id字段,$value 就是文档本身

为查询规定一个标准    
我们可以通过find()方法得到集合中的文档子集,例如,我们要查询出集合中i字段为71的文档,我们可以使用下列方法    
<?php

$query = array( “i” => 71 );  
$cursor = $collection->find( $query );    
while( $cursor->hasNext() ) {    
    var_dump( $cursor->getNext() );    
}    
?>    
我们将打印如下数据    
array(2) {    
  ["_id"]=>    
  object(MongoId)#6 (0) {    
  }    
  ["i"]=>    
  int(71)    
  ["_ns"]=>    
  “testCollection”    
}    
为查询设定一个范围    
我们可以通过find()创建一个查询语句以得集合中的一个子集,例如如果我们得到所有”i”>50的文档,我们可以使用如下代码    
<?php    
$query = array( “i” => array(‘$gt’ =>50)); //注意’$gt’两边的单引号    
$cursor = $coll->find( $query );

while( $cursor->hasNext() ) {  
    var_dump( $cursor->getNext() );    
}    
?>    
我们同样可以得到20 < i <= 30之间的数据    
<?php    
$query = array( “i” => array( “\$gt” => 20, “\$lte” => 30 ) );    
$cursor = $coll->find( $query );

while( $cursor->hasNext() ) {  
    var_dump( $cursor->getNext() );    
}    
?>

我们非常容易漏掉$美元符号,你也可以选择你自定义的符号来代替美元符号,选择一个不会在你的建里面出现的符号例如”:”,在php.ini中加上这么一句话  
mongo.cmd = “:”    
那么上面的代码就可以替换成 
<?php    
$query = array( “i” => array( “:gt” => 20, “:lte” => 30 ) );    
?>    
当然你也可以使用ini_set(“mongo.cmd”, “:”)的方法来改变

创建一个索引    
MongoDB支持索引,并且可以很容易的加到一个集合中,你只要指定某个字段为索引就行了,并且还可以指定 正序索引(1)与 倒序索引(-1)    
下面的代码为I创建了索引    
<?php    
$coll->ensureIndex( array( “i” => 1 ) );  //在”i”上创建了一个索引    
$coll->ensureIndex( array( “i” => -1, “j” => 1 ) );//在”i”上创建了倒序索引 在”j”上创建了正序索引    
?>

一个简单的列子    
这个例子展示了如何链接mongodb数据库,如何选择数据库,如何插入数据,如何查询数据,以及关闭数据库链接

<?php  
//链接    
$m = new Mongo();    
// 选择一个数据库    
$db = $m->comedy;    
$collection = $db->cartoons;    
//添加一个元素    
$obj = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );    
$collection->insert($obj);    
//添加另一个元素,使用不同的格式    
$obj = array( "title" => "XKCD", "online" => true );    
$collection->insert($obj);    
//查询所有的集合    
$cursor = $collection->find();    
//重复显示结果    
foreach ($cursor as $obj) {    
echo $obj["title"] . "\n";    
}    
// 关闭链接    
$m->close();    
?>

输出结果为  
Calvin and Hobbes

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消