標籤:des blog http 使用 os io 資料 for
Mongodb的常用操作
參看手冊,php官方的http://us2.php.net/manual/en/mongo.manual.php
也可以參看mongodb官方的教程
資料庫連接
⑴預設格式
$m = new Mongo();
//這裡採用預設串連原生27017連接埠,當然你也可以串連遠程主機如 192.168.0.4:27017,如果連接埠是27017,連接埠可以省略
⑵標準串連
$m = new Mongo("mongodb://${username}:${password}@localhost");
執行個體:$m = new Mongo("mongodb://127.0.0.1:27017/admin:admin");
資料庫的使用者名稱和密碼都是admin
資料庫操作:
插入資料:
+ View Code
結果:
帶條件的查詢
查詢 title為huaibei的欄位
1 $query = array( "title" => "huaibei" );
2 $cursor = $collection->find( $query ); // 在$collectio集合中尋找滿足$query的文檔
常用的SQL轉化為mongodb的條件
mysql: id = 123
mongo: array(‘id‘=>123)
mysql: name link ‘%bar%‘
mongo: array(‘name‘ => new MongoRegex(‘/.*bar.*/i‘))
mysql: where id > 10
mongo: array(‘id‘ => array(‘$gt‘ => 10))
mysql: where id >= 10
mongo: array(‘id‘ => array(‘$gte‘ => 10))
mysql: where id < 10
mongo: array(‘id‘ => array(‘$lt‘ => 10))
mysql: where id <= 10
mongo: array(‘id‘ => array(‘$lte‘ => 10))
mysql: where id > 1 and id < 10
mongo: array(‘id‘ => array(‘$gt‘ => 1,‘$lt‘ => 10))
mysql: where id <> 10
mongo: array(‘id‘ => array(‘$ne‘ => 10))
mysql: where id in(123)
mongo: array(‘id‘ => array(‘$in‘ => array(1,2,3)))
mysql: where id not in(123)
mongo: array(‘id‘ => array(‘$nin‘ => array(1,2,3)))
mysql: where id = 2 or id = 9
mongo: array(‘id‘ => array(‘$or‘ => array(array(‘id‘=>2),array(‘id‘=>9))))
mysql: order by name asc
mongo: array(‘sort‘=>array(‘name‘=>1))
mysql: order by name desc
mongo: array(‘sort‘=>array(‘name‘=>-1))
mysql: limit 0,2
mongo: array(‘limit‘=>array(‘offset‘=>0,‘rows‘=>2))
mysql: select name,email
mongo: array(‘name‘,‘email‘)
mysql: select count(name)
mongo: array(‘COUNT‘) //注意:COUNT為大寫
更詳細的轉換參考http://us2.php.net/manual/en/mongo.sqltomongo.php
注意事項
查詢時,每個Object插入時都會自動產生一個獨特的_id,它相當於RDBMS中的主鍵,用於查詢時非常方便 (_id每一都不同,很像自動增加的id)
如:
1 <?php 2 3 $person = array ( "name" => "joe" ); 4 5 $people ->insert( $person ); 6 7 $joe = $people ->findOne( array ( "_id" => $person [ ‘_id‘ ])); 8 9 ?> |
資料更改
添加一個新欄位
/** 原欄位:
* {"username" : "...", "password" : "...", "email" : "..."}
*/
$coll->update(array("username" => "joe"), array(‘$set‘ => array("twitter" => "@joe4153")));
/** 操作後的欄位:
* {"username" : "joe", "password" : "...", "email" : "...", "twitter" : "@joe4153"}
*/
更改欄位值
/** 原的資料
* {"username" : "...", "password" : "...", "email" : "..."}
*/
$coll->update(array("username" => "joe"), array("userId" => 12345, "info" => array(
"name" => "joe", "twitter" => "@joe4153", "email" => "..."), "likes" => array()));
/** 操作後的資料:
* {
* "userId" : 12345,
* "info" : {
* "name" : "joe",
* "twitter" : "@joe4153",
* "email" : "..."
* },
* "likes" : []
* }
*/
比較複雜的更新
更改author為john的名稱
{
"_id" : ObjectId("4b06c282edb87a281e09dad9"),
"content" : "this is a blog post.",
"comments" :
[
{
"author" : "Mike",
"comment" : "I think that blah blah blah...",
},
{
"author" : "John",
"comment" : "I disagree."
}
]
}
操作:<?php
$blog->update(
array("comments.author" => "John"),
array(‘$set‘ => array(‘comments.$.author‘ => "Jim")));
?>
刪除一個資料庫
$m -> dropDB("comedy");
列出所有可用資料庫
$m->listDBs(); //無傳回值
轉載一部分mongodb常用的資料庫方法
MongoDB中有用的函數:
建立一個MongoDB對象
http://us.php.net/manual/en/mongodb.construct.php
$mo = new Mongo();
$db = new MongoDB($mo,’dbname’);//通過建立方式獲得一個MongoDB對象
刪除當前DB
http://us.php.net/manual/en/mongodb.drop.php
$db = $mo->dbname;
$db->drop();
獲得當前資料庫名
http://us.php.net/manual/en/mongodb.–tostring.php
$db = $mo->dbname;
$db->_tostring();
選擇想要的collection:
A:
$mo = new Mongo();
$coll = $mo->dbname->collname;//獲得一個collection對象
B:
$db = $mo->selectDB(’dbname’);
$coll = $db->collname;
C:
$db = $mo->dbname;
$coll = $db->collname;
D:
$db = $mo->dbname;
$coll = $db->selectCollectoin(’collname’);//獲得一個collection對象
插入資料(MongoCollection對象):
http://us.php.net/manual/en/mongocollection.insert.php
MongoCollection::insert(array $a,array $options)
array $a 要插入的數組
array $options 選項
safe 是否返回操作結果資訊
fsync 是否直接插入到物理硬碟
常式:
$coll = $mo->db->foo;
$a = array(’a‘=>’b‘);
$options = array(’safe’=>true);
$rs =$coll->insert($a,$options);
$rs為一個array型的數組,包含操作資訊
刪除資料庫中的記錄(MongoCollection對象):
http://us.php.net/manual/en/mongocollection.remove.php
MongoCollection::remove(array $criteria,array $options)
array $criteria 條件
array $options 選項
safe 是否返回操作結果
fsync 是否是直接影響到物理硬碟
justOne 是否隻影響一條記錄
常式:
$coll = $mo->db->coll;
$c = array(’a‘=>1,’s’=>array(’$lt’=>100));
$options = array(’safe’=>true);
$rs = $coll->remove($c,$options);
$rs為一個array型的數組,包含操作資訊
更新資料庫中的記錄(MongoCollection對象):
http://us.php.net/manual/en/mongocollection.update.php
MongoCollection::update(array $criceria,array $newobj,array $options)
array $criteria 條件
array $newobj 要更新的內容
array $options 選項
safe 是否返回操作結果
fsync 是否是直接影響到物理硬碟
upsert 是否沒有匹配資料就添加一條新的
multiple 是否影響所有合格記錄,預設隻影響一條
常式:
$coll = $mo->db->coll;
$c = array(’a‘=>1,’s’=>array(’$lt’=>100));
$newobj = array(’e‘=>’f‘,’x‘=>’y‘);
$options = array(’safe’=>true,’multiple’=>true);
$rs = $coll->remove($c,$newobj,$options);
$rs為一個array型的數組,包含操作資訊
查詢collection獲得單條記錄(MongoCollection類):
http://us.php.net/manual/en/mongocollection.findone.php
array MongoCollection::findOne(array $query,array $fields)
array $query 條件
array $fields 要獲得的欄位
常式:
$coll = $mo->db->coll;
$query = array(’s’=>array(’$lt’=>100));
$fields = array(’a‘=>true,’b‘=>true);
$rs = $coll->findOne($query,$fields);
如果有結果就返回一個array,如果沒有結果就返回NULL
查詢collection獲得多條記錄(MongoCollection類):
http://us.php.net/manual/en/mongocollection.find.php
MongoCursor MongoCollection::find(array $query,array $fields)
array $query 條件
array $fields 要獲得的欄位
常式:
$coll = $mo->db->coll;
$query = array(’s’=>array(’$lt’=>100));
$fields = array(’a‘=>true,’b‘=>true);
$cursor = $coll->find($query,$fields);
//排序
$cursor->sort(array(‘欄位‘=>-1));(-1倒序,1正序)
//跳過部分記錄
$cursor->skip(100);跳過100行
//只顯示部分記錄
$cursor->limit(100);只顯示100行
返回一個遊標記錄對象MongoCursor。
針對遊標對象MongoCursor的操作(MongoCursor類):
http://us.php.net/manual/en/class.mongocursor.php
迴圈或的結果記錄:
$cursor = $coll->find($query,$fields);
while($cursor->hasNext()){
$r = $cursor->getNext();
var_dump($r);
}
或者
$cursor = $coll->find($query,$fields);
foreache($cursor as $k=>$v){
var_dump($v);
}
或者
$cursor = $coll->find($query,$fields);
$array= iterator_to_array($cursor);
**************************************************************************
Mongodb的介紹安裝常用操作都已經介紹完畢,其實感覺他就是mysql,現在你就可以進入你的開發之旅了,推薦使用這個作為後台日誌系統資料庫。