PHP-mongo-php-library使用

上文地址:http://www.reibang.com/p/1de642b956f7

接下來,我就按照mongo-php-library這個官方包來給大家演示一遍基本的curd,我附帶上原生的mongodb語句,以便大家理解
注明:我用的MongoDB版本為3.4.

shell

打開任意一張表就可以看到這樣的界面,在紅框內(nèi)輸入原生語句,ctrl+r執(zhí)行

首先,安裝這個包composer require mongodb/mongodb,再加上use MongoDB;,然后就可以開始享用了.
該庫的手冊地址:https://docs.mongodb.com/php-library/current/tutorial/crud/


連接

//連接本地服務(wù)
$client = new MongoDB\Client('mongodb://127.0.0.1:27017');
//選擇數(shù)據(jù)庫和集合
$collection = $client->selectCollection('DatebaseName', 'collectionName');
//這個庫同時支持mongo拓展的寫法.
//$collection = $client->DatebaseName->collectionName;

插入
單條插入 : insertOne方法將單個文檔插入到MongoDB中迅办,并返回一個實例,使用getInsertedId可以獲取插入文檔的id , mongodb會自動生_id字段,為24位隨機字符串,同時,用戶也可以指定生成
原生語句為db.user.insertOne({'name':'dullcat'})

$user = array('name'=>'Dullcat','sex'=>'male');
//執(zhí)行并返回實例
$result = $collection->insertOne($user);
//拿到返回的_id
$id= $result->getInsertedId();
//返回值:5af53f89804c044a340018f2 

批量插入:跟mysql的批量原理相同,組裝成多維數(shù)組.和單條插入的函數(shù)相仿insertMany,getInsertedIds
原生語句為db.user.insertMany([{'name':'貓爺'},{'name':'Dullcat'}])

$users = array(array('name'=>'貓爺','sex'=>'male'),array('name'=>'DullCat','sex'=>'male'));
$result = $collection->insertMany($users);
$ids_info= $result->getInsertedIds();
//拿到插入的個數(shù)
$count = $result->getInsertedCount();
/**
//返回值:
array(2) {
  [0]=>
  object(MongoDB\BSON\ObjectId)#11 (1) {
    ["oid"]=>
    string(24) "5af548d3804c044a340018f8"
  }
  [1]=>
  object(MongoDB\BSON\ObjectId)#14 (1) {
    ["oid"]=>
    string(24) "5af548d3804c044a340018f9"
  }
}
*/

需要注意的是批量返回的并不是string類型的id了,而是一個非常復(fù)雜的結(jié)構(gòu),如果我們想要以數(shù)組形式拿到他的_id,我們可以使用一下函數(shù)

foreach($ids_info as $value){
      $ids [] = $value->__toString();
}
/**
//格式為:
array(2) {
  [0]=>
  string(24) "5af54ead804c044a34001920"
  [1]=>
  string(24) "5af54ead804c044a34001921"
}
*/

查詢
單個查詢:findOne,相當(dāng)于sql語句的limit 1
原生語句:db.user.findOne({"_id":ObjectId("5af5553f804c044a34001922")})

//由于儲存的`_id`字段是一個BSON類型的object,所以要按_id字段來查的話,要先進行類型轉(zhuǎn)換
$mongo_id = new MongoDB\BSON\ObjectId('5af5553f804c044a34001922');
//查詢執(zhí)行
$info = $collection->findOne(array('_id'=>$mongo_id));
//如果沒有找到,返回值為null
//返回值是一個對象,這里我們可以將他強制類型轉(zhuǎn)換`$info = (array)$info`
/**
object(MongoDB\Model\BSONDocument)#22 (1) {
  ["storage":"ArrayObject":private]=>
  array(4) {
    ["_id"]=>
    object(MongoDB\BSON\ObjectId)#21 (1) {
      ["oid"]=>
      string(24) "5af5553f804c044a34001922"
    }
    ["name"]=>
    string(5) "suhua"
    ["age"]=>
    int(26)
    ["sex"]=>
    string(3) "男"
  }
}
*/

多個查詢:find
多個查詢有兩個數(shù)組參數(shù),第一個是查詢的條件,第二個是選項

$info = $collection->find(array('name'=>'DullCat'));
//第一個數(shù)組的查詢條件要注意下`$gt`這是查詢選擇器,表示大于
//第二個數(shù)組的選項意義為:`skip`跳過0條數(shù)據(jù),`limit`查詢10條數(shù)據(jù),`sort`按age字段正序排序(1為正序,-1為倒序)
$info = $collection->find(array('name'=>'Dullcat',,'age'=>array('$gt'=>'1')),array('skip'=>0,'limit'=>10,'sort'=>array('age'=>1)));
//這時請注意,多個查詢返回的是游標(biāo)(Cursor),需要的進行處理
//您可以用函數(shù)轉(zhuǎn)換
$info_array = $info->toArray();
//也可以用foreach迭代該對象
foreach($info as $value){
       $info_array [] = $value;
}

更新
單條更新updateOne 多條更新updateMany
單個更新和多個更新的用法一模一樣,但是要注意的是他的操作符和選項

//update方法有三個數(shù)組參數(shù)
//第一個數(shù)組是查詢條件
//第二數(shù)組是更新操作符,例如下面的`array('$set'=>array('age'=>'23'))`,意義為:更改age字段為23
//第三個數(shù)組是選項,可以選擇各種參數(shù),例如下面的`array('upsert'=>true)`,意義為當(dāng)能查詢到就進行更改,如果沒有查詢到就進行新增操作
$result = $collection->updateOne(array('name'=>'DullCat'),array('$set'=>array('age'=>'23')),array('upsert'=>true));
/**
原生語句
db.user.updateOne(
   { "name": "dullcat" },
   {$set: { "age": "123" }},
   { upsert: true }
)
*/

刪除
單個刪除deleteOne
原生語句:db.users.deleteOne( { name: "DullCat" } )
多個刪除deleteMany
原生語句:db.users.deleteMany( { name: "DullCat" } )
單個刪除和多個刪除的用法一模一樣,只是單個刪除只刪除查詢到的第一條數(shù)據(jù),而多個刪除則刪除匹配到的所有數(shù)據(jù)

//單個刪除
$result = $collection->deleteOne(array('name'=>'DullCat'));
//多個刪除
$result = $collection->deleteMany(array('name'=>'DullCat'));
//拿到刪除數(shù)據(jù)的條數(shù)
 $count = $result->getDeletedCount();

當(dāng)然,還有很多功能我都沒講到,比如常用的aggregate聚合,這些就留給大家去閱讀官方文檔吧

參考文檔:
查詢選擇器:https://docs.mongodb.com/manual/reference/operator/query/
更新操作符:https://docs.mongodb.com/manual/reference/operator/update/#update-operators
Aggregation Pipeline:https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市奴璃,隨后出現(xiàn)的幾起案子推励,更是在濱河造成了極大的恐慌鹤耍,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件验辞,死亡現(xiàn)場離奇詭異稿黄,居然都是意外死亡,警方通過查閱死者的電腦和手機跌造,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門杆怕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來族购,“玉大人,你說我怎么就攤上這事陵珍∏拚龋” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵互纯,是天一觀的道長瑟幕。 經(jīng)常有香客問我,道長留潦,這世上最難降的妖魔是什么只盹? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮愤兵,結(jié)果婚禮上鹿霸,老公的妹妹穿的比我還像新娘。我一直安慰自己秆乳,他們只是感情好懦鼠,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屹堰,像睡著了一般肛冶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扯键,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天睦袖,我揣著相機與錄音,去河邊找鬼荣刑。 笑死馅笙,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的厉亏。 我是一名探鬼主播董习,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼爱只!你這毒婦竟也來了皿淋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤恬试,失蹤者是張志新(化名)和其女友劉穎窝趣,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體训柴,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡哑舒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了畦粮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片散址。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡乖阵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出预麸,到底是詐尸還是另有隱情瞪浸,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布吏祸,位于F島的核電站对蒲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏贡翘。R本人自食惡果不足惜蹈矮,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸣驱。 院中可真熱鬧泛鸟,春花似錦、人聲如沸踊东。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闸翅。三九已至再芋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坚冀,已是汗流浹背济赎。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留记某,地道東北人司训。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像液南,于是被迫代替她去往敵國和親豁遭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容