PHP-mongo-php-library使用

上文地址:http://www.itdecent.cn/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/


連接

//連接本地服務
$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了,而是一個非常復雜的結(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,相當于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)));
//這時請注意,多個查詢返回的是游標(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)`,意義為當能查詢到就進行更改,如果沒有查詢到就進行新增操作
$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();

當然,還有很多功能我都沒講到,比如常用的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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容