深入理解 PHP MongoDB 查詢
在 MongoDB 常用的編程語言中,PHP 擁有完備的 MongoDB 擴展,可以非常方便地在 PHP 中處理 MongoDB 數據庫。對于需要進行復雜數據查詢的應用, MongoDB 的查詢語法也非常強大。本篇文章將深入探討在 PHP 中如何使用 MongoDB 查詢。
基本查詢
MongoDB 的基本查詢類似于 SQL 的 SELECT 命令,用于獲取集合中的數據。下面是一個簡單的示例:
$conn = new MongoDB\Driver\Manager("mongodb://localhost:27017");
$filter = ["age" =>['$gt' =>20]];
$options = [];
$query = new MongoDB\Driver\Query($filter, $options);
$rows = $conn->executeQuery("myDB.myCollection", $query);
foreach ($rows as $row) {
// 處理匹配到的記錄
}
上述代碼的作用是從 myDB 數據庫的 myCollection 集合中查詢所有年齡大于 20 歲的記錄。
條件查詢
同時查詢多個條件時,可以借助一些符號($and、$or、$in、$nin、$lt、$lte、$gt、$gte、$ne)來實現條件組合。下面是一個示例:
$cond1 = ['state' =>'NY'];
$cond2 = ['pop' =>['$lt' =>5000]];
$filter = ['$and' =>[$cond1, $cond2]];
$options = [];
$query = new MongoDB\Driver\Query($filter, $options);
$rows = $conn->executeQuery("myDB.myCollection", $query);
foreach ($rows as $row) {
// 處理匹配到的記錄
}
上述代碼的作用是從 myDB 數據庫的 myCollection 集合中查詢狀態為 NY 且人口少于 5000 的記錄。
集合查詢
除了基本查詢和條件查詢外, MongoDB 還支持對集合進行聚合、分組等查詢操作。下面是一個示例:
$pipeline = [
['$unwind' =>'$grades'],
['$group' =>[
'_id' =>['class_id' =>'$class_id', 'student_id' =>'$student_id'],
'avg' =>['$avg' =>'$grades.score'],
]],
['$sort' =>['avg' =>-1]],
['$limit' =>5],
];
$command = new MongoDB\Driver\Command([
'aggregate' =>'myCollection',
'pipeline' =>$pipeline,
'allowDiskUse' =>true,
]);
$rows = $conn->executeCommand('myDB', $command);
foreach ($rows as $row) {
// 處理匹配到的記錄
}
上述代碼的作用是從 myDB 數據庫的 myCollection 集合中查詢每個班級中考試成績前五名的學生。
索引查詢
針對大型數據庫,為了提高查詢效率, MongoDB 還支持對索引進行查詢。下面是一個示例:
$filter = ['score' =>['$gt' =>80]];
$options = ['sort' =>['score' =>-1], 'skip' =>1, 'limit' =>3];
$query = new MongoDB\Driver\Query($filter, $options);
$rows = $conn->executeQuery('myDB.myCollection', $query);
foreach ($rows as $row) {
// 處理匹配到的記錄
}
上述代碼的作用是從 myDB 數據庫的 myCollection 集合中查詢分數大于 80 分的記錄,并按照分數降序排序,跳過一條記錄,返回三條匹配記錄。
總結
本篇文章主要介紹了 MongoDB 查詢的一些基本用法和常見場景。除此之外, MongoDB 還支持很多高級查詢方式,如文本搜索、地理位置查詢等。對于需要深入了解 MongoDB 查詢的開發人員來說,本篇文章可以作為一個很好的入門指南。