MongoDB 使用

UKNOW發表於2020-04-14

mongoDB是一個基於分散式檔案儲存的資料庫,由C++編寫,旨在為web應用提供可擴充套件的高效能的資料儲存解決方案。它是一個介於關聯式資料庫和非關聯式資料庫之間的產品,是非關聯式資料庫中的功能最豐富,最像關聯式資料庫的。

mongoDB連結

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

1.mongoDB PHP7以上版本用法,如果是PHP7以下可以參考 菜鳥教程https://www.runoob.com/mongodb/mongodb-php...

use  m7jiMongoDB\Driver\BulkWrite;
use MongoDB\Driver\Query;

$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$bulk    = new MongoDB\Driver\BulkWrite();


//插入資料
  $bulk->insert(['x' => 1, 'name' => 'jay', 'text' => '周杰倫']);
  $bulk->insert(['x' => 2, 'name' => 'jj', 'text' => '林俊杰']);
 $bulk->insert(['x' => 3, 'name' => 'tom', 'text' => '湯姆']);
 $bulk->insert(['x' => 4, 'name' => 'kai', 'text' => '凱']);

 $manager->executeBulkWrite('test.sites', $bulk);

//讀取資料
  $filter  = ['x' => ['$gt' => 0]];
  $options = [* 'projection' => ['x' => 0],
  'sort'       => ['x' => -1]
  ];

  $query = new MongoDB\Driver\Query($filter, $options);
  $list  = $manager->executeQuery('test.sites', $query);

//修改
/**
 * 第一個陣列是查詢條件
 * 第二個陣列是 更新內容
 * 第三個陣列 multi 預設為 false,如果是為true 則更新全部符合條件的,為false 只更新第一個、upsert 預設為false,為true 不存在 則新增
 */

  $bulk->update([
  'x' => 5,
  ], [
  '$set' => ['text' => 'xx']
  ], [
  'multi'=>true,'upsert'=>true
  ]);

  $manager->executeBulkWrite('test.sites', $bulk);

//刪除
// limit =0 刪除所有匹配資料,limit=1刪除第一條匹配資料
$bulk->delete(['text' => 'xxx'], ['limit' => 0]);
$manager->executeBulkWrite('test.sites', $bulk);

2.使用composer 依賴,更加方便

composer require mongodb/mongodb 

$mongoClient = new MongoDB\Client('mongodb://127.0.0.1:27017');
$collection = $mongoClient->mongo_test->users;

//插入單條資料
$insertData = [ 
   'id' => 2, 
   'name' => 'liuyuanxiu',
   'age' => 100, 
   'hobby' => '音樂,跑步'
   ];
$result = $collection->insertOne($insertData);

//插入多條資料 
$insertManyData = []; 
for ($i = 6; $i < 60; $i++) { 
    $insertManyData[] = [
    'id' => $i, 
    'name' => 'user_' . $i, 
    'age' => rand(10, 100), 'hobby' => '電影'   
    ]; 
}
$res = $collection->insertMany($insertManyData); 
echo $res->getInsertedCount(); 
var_dump($res->getInsertedIds());

//查詢
$row = $collection->findOne(['name' => 'karen']); 
$filters = [ 'id' => ['$gt' => 30] ]; $many = $collection->find($filters)->toArray();
$curSur = $collection->find([ 'name'=>new MongoDB\BSON\Regex('^user','i') ]);

//更新 
$res1 = $collection->updateOne(['id'=>1],['$set'=>['name'=>'shen_guo_wei']]); $res2 = $collection->updateMany(['id'=>['$gt'=>50]],['$set'=>['age'=>10]]);

//刪除
$collection->deleteOne(['id'=>5]); $collection->deleteMany(['id'=>['$gt'=>20]]);

3.命令列操作

show dbs 檢視所有資料庫
use dbname 切換到指定資料庫(如果不存在即建立)
db.dropDatabase() 刪除當前資料庫

show collections 檢視當前資料庫下的集合
db.集合名.drop() 刪除集合
db.createCollections(name,{選項}) 建立集合
db.集合名.insert({'name':'shen','age':20}}) 新增單條
db.集合名.insertMany([{},{}]) 新增多條
db.集合名.update(query,//查詢條件
                 update,//更新物件和內容
                      {
                        upsert:bool,//可選,預設false,如果true 記錄不存在則新增記錄
                        multi:bool,//可選 預設false,如果為true 更新所有符合條件記錄
                        write:document //可選 丟擲異常級別 
                        }
                    )

 db.集合名.remove(query,//可選 查詢條件
                  justOne,//可選 true 只刪除一個文件,預設 false 刪除所有符合條件
                  write,//可選 丟擲異常級別 
 ) 移除集合資料
 db.集合名.deleteOne(query)
 db.集合名.deleteMany(query)

db.集合名.find(quey,//可選,查詢條件
               projection // 使用投影操作符執行返回的鍵 
               ) 查詢
db.集合名.find().limit().skip().sort({欄位:1 升序,-1 降序}) // limit 擷取條數,skip 起始位置   
db.集合名.createIndex({欄位:1},{選項}})     

db.集合.aggregate()                            
db.集合名.findOne()                
db.集合名.getIndexes() 檢視索引
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章