PHP操作MongoDB

//MongoDB的配置
$MONGO_SERVER = array(
 	'host'=>'127.0.0.1',
    'port'=>27017,
    'dbname'=>'app',
    'user'=>'',
    'pwd'=>''
);
//主機端口
$host_port = $MONGO_SERVER['host'] . ":" . $MONGO_SERVER['port'];
//實例化Mongo 
$mongo = new MongoClient($host_port);
//選擇數據庫
$db = $mongo->selectDB($MONGO_SERVER['dbname']);
//在當前數據庫創建一個集合
$table = $db->createCollection("member");
//選擇一個集合
$collection = $db->member;
//插入的數據
$list = array(
	array(
		"name" => "XiaoMing", 
		"email" => "[email protected]", 
		"age" => 24,
		"city" => "BeiJing",
		"work" => "PHP"
	),
	array(
		"name" => "Tom", 
		"email" => "[email protected]", 
		"age" => 25,
		"city" => "BeiJing",
		"work" => "Android"
	),
	array(
		"name" => "Ye", 
		"email" => "[email protected]", 
		"age" => 21,
		"city" => "JiNan",
		"work" => "Android"
	)
);
//插入數據庫
foreach($list as $info){
	$collection->insert($info);
}
//獲取全部數據
$data = $collection->find();
//循環數據顯示
foreach ($data as $document) {
	var_dump($document);
}

//刪除文檔
$collection->remove(array("name"=>"wang","age"=>24), array("justOne" => true));

//更新文檔
$collection->update(array("name"=>"Jiang"), array('$set'=>array("age"=>21)));
//更新
$where = array("money"=> 94);
$param  = array('$set'=>array('money'=>100));
$opt = array('upsert'=>0,'multiple'=>1);
$res = $collection->update($where,$param,$opt);
// 顯示更新後的文檔
$cursor = $collection->find();

//查詢所有的數量
$cursor = $collection->find()->count();
//查詢age=24的數量
$cursor = $collection->find(array('age'=>24))->count();
//查詢age<24的數量
$cursor = $collection->find(array('age'=>array('$lt'=>24)))->count();
//查詢age<=24的數量
$cursor = $collection->find(array('age'=>array('$lte'=>24)))->count();
//查詢age>24的數量
$cursor = $collection->find(array('age'=>array('$gt'=>24)))->count();
//查詢age>=24的數量
$cursor = $collection->find(array('age'=>array('$gte'=>24)))->count();
//查詢age!=24的數量
$cursor = $collection->find(array('age'=>array('$ne'=>24)))->count();
//查詢age>22並且小於25的數量
$cursor = $collection->find(array('age'=>array('$gt'=>22,'$lt'=>25)))->count();
//查詢age>=22並且age<=25的數量
$cursor = $collection->find(array('age'=>array('$gte'=>22,'$lte'=>25)))->count();
//查詢age=24並且email爲[email protected]的數量
$cursor = $collection->find(array('age'=>24,'email'=>'[email protected]'))->count();
//查詢age=24並且email爲[email protected]的數據
$cursor = $collection->find(array('age'=>24,'email'=>'[email protected]'));
//查詢age=24的兩條記錄
$cursor = $collection->find(array('age'=>24))->limit(5);
//skip()方法來跳過指定數量的數據
$cursor = $collection->find(array('age'=>24))->limit(5)->skip(4);
//sort()方法對數據進行排序,1爲升序,-1降序
$cursor = $collection->find()->sort(array('age'=>-1,'name'=>1));
//查詢age=24的,只顯示name和email
$cursor = $collection->find(array('age'=>24))->fields(array('name'=>1,'email'=>1));
//查詢age=24的,不顯示work
$cursor = $collection->find(array('age'=>24))->fields(array('work'=>0));

//模糊like查詢
$param = array("name" => new MongoRegex('/^W/'));
$cursor = $collection->find($param);
$param = array("name" => new MongoRegex('/ang$/'));
$cursor = $collection->find($param);
$param = array("name" => new MongoRegex('/iang/'));
$cursor = $collection->find($param);

//$or
$param = array('$or'=>array(array("name"=>"Jiang"),array("name"=>"Qiang")));
$cursor = $collection->find($param)->fields(array('name'=>1,'email'=>1));

//$in和$nin
$param = array("age" => array('$in'=>array(21,22,23)));
$cursor = $collection->find($param)->fields(array('name'=>1,'email'=>1));
$param = array("age" => array('$nin'=>array(21,22,23)));
$cursor = $collection->find($param)->fields(array('name'=>1,'email'=>1));

//MongoDB中聚合的方法使用aggregate()都相當於mysql中的group by
// db.user.aggregate([{$group:{_id:"$user",numCount:{avg:1}}}])
// $sum---計算總和
// db.user.aggregate([{$group:{_id:"$user",numCount:{$sum:"$likes"}}}])
// $avg---計算平均值
// db.user.aggregate([{$group:{_id:"$user",numCount:{$avg:"$likes"}}}])
// $min---獲取集合中所有文檔對應值得最小值
// db.user.aggregate([{$group:{_id:"$user",numCount:{$min:"$likes"}}}])
// $max---獲取集合中所有文檔對應值得最大值
// db.user.aggregate([{$group:{_id:"$user",numCount:{$max:"$likes"}}}])
$option = array(
	//匹配條件
	array(
		'$match'=>array(
			'likes'=>array(
				'$gt'=>80,
				'$lt'=>110
			)
		)
	),
	//統計條件
	array(
		'$group'=>array(
			'_id'=>'$user',
			'numcount'=>array(
				'$sum'=>'$likes'
			)
		)
	)
);
//獲取全部數據
$data = $collection->aggregate($option);
//循環數據顯示
$info = array();
foreach ($data as $document) {
	$info[] = $document;
}

//分頁代碼
//設置分頁數
$page = isset($_GET['page']) ? max(1,(int)$_GET['page']) : 1;
//設置每頁的數量
$pagesize = 3;
//獲取總的數據量
$count = $collection->find()->count();
//計算總頁數
$totalPage = ceil($count/$pagesize);
if($page>$totalPage){
	$page = $totalPage;
}
//開始設置分頁的skip
$skip = ($page-1) * $pagesize;
//構造分頁字符串
$pageStr = "";
for($i = 1; $i <= $totalPage; $i++){
	if($i == $page){
		$pageStr .= ' <strong>'.$i.'</strong>';
	}else{
		$pageStr .= "<a href='?page=$i'>".$i."</a>";
	}
}
//獲取數據
$allData = $collection->find()->skip($skip)->limit($pagesize);
$data = array();
foreach($allData as $info){
	$data[] = $info;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章