1:首先需要去安装对应版本的mongoDB php扩展dll文件,开扩展,重启apache

这个可以去php官网找找,可以去php手册看看mongoDB函数,里面安装和函数使用的介绍,

2:

Mongo 配置选项 
名字                                  默认                       可修改范围                    描述
mongo.default_host         "localhost"                PHP_INI_ALL 
mongo.default_port          27017                      PHP_INI_ALL                 默认连接端口
mongo.auto_reconnect    true                          PHP_INI_SYSTEM         是否在丢失连接的时候重新连接
mongo.allow_persistent   true                          PHP_INI_SYSTEM          是否支持持久连接
mongo.chunk_size          262144                     PHP_INI_SYSTEM          每块的大小,至少100bytes,最大4 megabytes 
mongo.cmd                    "$"                              PHP_INI_ALL                 在非同一类型比较时代替$
mongo.utf8                     "1"                              PHP_INI_ALL                1.1.0版本后此选项将淘汰
一般连接

$connection = new Mongo(); // connects to localhost:27017
$connection = new Mongo( "example.com" ); 
$connection = new Mongo( "example.com:65432" );
$connection ->close();关闭连接
$connection = new Mongo(); // connects to localhost:27017
$connection = new Mongo( "example.com" ); 
$connection = new Mongo( "example.com:65432" );
$connection ->close();关闭连接



给库添加账号密码验证


$m = new Mongo();
$db = $m->admin;
$db->authenticate($username, $password);
$m = new Mongo();
$db = $m->admin;
$db->authenticate($username, $password);



其它连接方式


$m = new Mongo("mongodb://${username}:${password}@localhost:port");
//默认端口连上blog库
$m = new Mongo("mongodb://${username}:${password}@localhost/blog");
//连接到mongo和其副本上
$m = new Mongo("mongodb://localhost:27017,localhost:27018");
$m = new Mongo("mongodb://${username}:${password}@localhost:port");
//默认端口连上blog库
$m = new Mongo("mongodb://${username}:${password}@localhost/blog");
//连接到mongo和其副本上
$m = new Mongo("mongodb://localhost:27017,localhost:27018");



长连接,如下:x为任意标示字符,


$m = new Mongo("localhost:27017", array("persist" => "x"));
$m = new Mongo("localhost:27017", array("persist" => "x"));



1000次短连接耗时18s,而长连接,只需要0.02秒,


socket连接方式,这个我没试验成功,应该只针对linux


$m = new Mongo("mongodb:///tmp/mongo-27017.sock");
$m = new Mongo("mongodb://username:password@/tmp/mongo-27017.sock:0/foo");
$m = new Mongo("mongodb:///tmp/mongo-27017.sock");
$m = new Mongo("mongodb://username:password@/tmp/mongo-27017.sock:0/foo");

2:选着数据库

$db = $connection->dbname;//如果库不存在,会自己建立一个
$db = $connection->dbname;//如果库不存在,会自己建立一个



3:选择collection


$collection = $db->foobar;//两种方法,如下。同理,不存在的话会新建
$collection = $connection->baz->foobar;
$collection = $db->foobar;//两种方法,如下。同理,不存在的话会新建
$collection = $connection->baz->foobar;



4:添加数据


$data = array("name" => "lxh","info" => "lxh info");
$collection->insert($data);  采用关联数组,
$data = array("name" => "lxh","info" => "lxh info");
$collection->insert($data);  采用关联数组,



5:查找数据


$result = $collection->findOne(); //查找一条
$cursor = $collection->find(); //查找所有
$result = $collection->findOne(); //查找一条
$cursor = $collection->find(); //查找所有



他们都可以带参数,参数为关联数组,如下:


$query = array( "i" => 71 ); //多个条件,在数组中添加即可
$cursor = $collection->find( $query );
$query = array( "i" => 71 ); //多个条件,在数组中添加即可
$cursor = $collection->find( $query );



6:条件编写


多个条件,在数组中添加即可


$query = array( "i" => 71,"name" => "lxh" );
$query = array( "i" => 71,"name" => "lxh" );



不等条件,大于,小于,大于等于,小于等于


$query = array( "id" => array( '$gt' => 50 ) );//查找id大于50的数据
$query = array(
"i" => array( "\$gt" => 20, "\$lte" => 30 )
); 
//20 < i <= 30   大于等于估计用"\$gte"了,猜一下
$cursor = $coll->find( $query );
$query = array( "id" => array( '$gt' => 50 ) );//查找id大于50的数据
$query = array(
"i" => array( "\$gt" => 20, "\$lte" => 30 )
); 
//20 < i <= 30   大于等于估计用"\$gte"了,猜一下
$cursor = $coll->find( $query );

为躲避$,我们可以在php.ini中设定  mongo.cmd = ":" 用:代替$
7:计数

echo $collection->count();
echo $collection->count();



8:遍历结果


$cursor = $collection->find( $query );
//遍历结果,或用简单的遍历数组的方法
while( $cursor->hasNext() ) {  
var_dump( $cursor->getNext() );
}
$cursor = $collection->find( $query );
//遍历结果,或用简单的遍历数组的方法
while( $cursor->hasNext() ) {  
var_dump( $cursor->getNext() );
}



9:创建索引


$collection->ensureIndex( array( "i" => 1 ) );  //i递增索引
$collection->ensureIndex( array( "i" => -1, "j" => 1 ) );  
// i递减索引,j递增索引
$collection->ensureIndex( array( "i" => 1 ) );  //i递增索引
$collection->ensureIndex( array( "i" => -1, "j" => 1 ) );  
// i递减索引,j递增索引



10:其它


利用添加返回的"_id"


$person = array("name" => "joe");
$people->insert($person);
$joe = $people->findOne(array("_id" => $person['_id']));
$person = array("name" => "joe");
$people->insert($person);
$joe = $people->findOne(array("_id" => $person['_id']));



_id是mongoid。最常见的错误是attepting使用一个字符串匹配mongoid


$person = array("name" => "joe");
$people->insert($person);
$pid = $person['_id'] . "";
// 这样做是错误的
$joe = $people->findOne(array("_id" => $pid));
$person = array("name" => "joe");
$people->insert($person);
$pid = $person['_id'] . "";
// 这样做是错误的
$joe = $people->findOne(array("_id" => $pid));

//保存

$collection->save(array("awards" => array("gold", "silver", "bronze")));
$collection->save(array("awards" => array("gold", "silver", "bronze")));



awards列,保存一个数组{ "_id" : ObjectId("4b06c282edb87a281e09dad9"), "awards" : ["gold", "silver", "bronze"]}


忽视awards是数组,条件查询


$cursor = $collection->find(array("awards" => "gold"));
$cursor = $collection->find(array("awards" => "gold"));





"_id" : ObjectId("4b06c282edb87a281e09dad9"), 


"awards" : 


[


{


"first place" : "gold"


},


{


"second place" : "silver" 


},


{


"third place" :  "bronze"


}


]


}


如果是此类,查询如下:

$cursor = $collection->find(array("awards.first place" => "gold"));
//in 查询 gold or copper
$cursor = $collection->find(array("awards" => array('$in' => array("gold", "copper"))));
$collection->save( array("gold", "silver", "bronze"));
$cursor = $collection->find(array("awards.first place" => "gold"));
//in 查询 gold or copper
$cursor = $collection->find(array("awards" => array('$in' => array("gold", "copper"))));
$collection->save( array("gold", "silver", "bronze"));



0列silver,1列 bronze


修改

$collection->update(
array("name" => "dfd"),  //修改查询条件
array('$set' => array('sex' => "aim")),
array('multiple'=>true)  //更改多行,否则只改一行
);
$collection->update(
array("name" => "dfd"),  //修改查询条件
array('$set' => array('sex' => "aim")),
array('multiple'=>true)  //更改多行,否则只改一行
);


{  
 
 "_id" : ObjectId("4b06c282edb87a281e09dad9"),  
 
 "content" : "this is a blog post.", 
 
 "comments" :  
 
 [ 
 
 { 
 
 "author" : "Mike", 
 
 "comment" : "I think that blah blah blah...", 
 
 }, 
 
 { 
 
 "author" : "John", 
 
 "comment" : "I disagree." 
 
 } 
 
 ] 
 
 }


//知道索引
$blog->update($criteria, array('$set' => array("comments.1" => array("author" => "Jim"))));
//如果不知道 索引,可以用$代替
$blog->update(
array("comments.author" => "John"), 
array('$set' => array('comments.$.author' => "Jim")));
//知道索引
$blog->update($criteria, array('$set' => array("comments.1" => array("author" => "Jim"))));
//如果不知道 索引,可以用$代替
$blog->update(
array("comments.author" => "John"), 
array('$set' => array('comments.$.author' => "Jim")));