PHP Conference Japan 2024

MongoDB\Driver\Query::__construct

(mongodb >=1.0.0)

MongoDB\Driver\Query::__construct建立新的查詢

說明

final public MongoDB\Driver\Query::__construct(陣列|物件 $filter, ?陣列 $queryOptions = null)

建構一個新的 MongoDB\Driver\Query 物件,這是一個不可變的值物件,表示一個資料庫查詢。此查詢可以使用 MongoDB\Driver\Manager::executeQuery() 執行。

參數

filter (陣列|物件)

» 查詢述詞。空的述詞將會匹配集合中的所有文件。

注意在評估查詢條件時,MongoDB 會根據其本身的 » BSON 類型比較規則 比較類型和值,這與 PHP 的 比較類型轉換 規則不同。當匹配特殊的 BSON 類型時,查詢條件應該使用相對應的 BSON 類別(例如,使用 MongoDB\BSON\ObjectId 來匹配 » ObjectId)。

queryOptions

queryOptions
選項 類型 說明
allowDiskUse 布林值

允許 MongoDB 在處理阻塞排序操作時,使用暫存磁碟檔案來儲存超過 100 MB 系統記憶體限制的資料。

allowPartialResults 布林值

對於針對分片集合的查詢,如果某些分片無法使用,則從 mongos 返回部分結果,而不是拋出錯誤。

如果未指定,則會回到已棄用的 "partial" 選項。

awaitData 布林值 "tailable" 選項一起使用,如果在資料結尾而不是返回無資料時,會暫時阻塞游標上的 getMore 操作。逾時後,查詢會正常返回。
batchSize 整數

在第一批中返回的文件數量。預設為 101。批次大小為 0 表示將建立游標,但在第一批中不會返回任何文件。

在 3.2 之前的 MongoDB 版本中,如果查詢使用舊版網路協議 OP_QUERY,則無論匹配的文件數量為何,批次大小為 1 都將關閉游標。

collation 陣列|物件

» 排序規則 允許使用者指定字串比較的語言特定規則,例如字母大小寫和重音符號的規則。指定排序規則時,"locale" 欄位是必需的;所有其他排序規則欄位都是可選的。有關欄位的說明,請參閱 » 排序規則文件

如果未指定排序規則,但集合具有預設排序規則,則操作會使用為集合指定的排序規則。如果未為集合或操作指定排序規則,MongoDB 會使用先前版本中用於字串比較的簡單二進位比較。

此選項在 MongoDB 3.4+ 中可用,如果為較舊的伺服器版本指定,則會在執行時導致例外。

comment 混合

任意註釋,有助於透過資料庫分析器、currentOp 輸出和日誌追蹤操作。

註解可以是任何有效的 BSON 類型,適用於 MongoDB 4.4 以上版本。較早的伺服器版本僅支援字串值。

如果未指定,則會使用已棄用的 "$comment" 修飾符。

exhaust(全部提取) 布林值

以多個「更多」封包的形式高速串流傳輸數據,假設客戶端將完全讀取所有查詢的數據。當您提取大量數據並且知道您想要提取所有數據時,速度更快。注意:除非客戶端關閉連線,否則不允許不讀取所有數據。

MongoDB 3.2+ 中的 find 命令不支援此選項,並將強制驅動程式使用舊版 wire protocol 版本(即 OP_QUERY)。

explain(解釋) 布林值

如果為 true,則返回的 MongoDB\Driver\Cursor 將包含一個文件,描述用於返回查詢的過程和索引。

如果未指定,則會使用已棄用的 "$explain" 修飾符。

MongoDB 3.2+ 中的 find 命令不支援此選項,並且僅在使用舊版 wire protocol 版本(即 OP_QUERY)時才會被考慮。在 MongoDB 3.0+ 上應使用 » explain 命令。

hint(提示) 字串|陣列|物件

索引規範。以字串指定索引名稱或索引鍵模式。如果指定,則查詢系統將僅考慮使用提示索引的計劃。

如果未指定,則會使用已棄用的 "hint" 選項。

let(讓) 陣列|物件

參數名稱和值的映射。值必須是常數或不參考文件欄位的閉合表達式。然後可以在聚合表達式上下文中(例如 $$var)將參數作為變數存取。

此選項在 MongoDB 5.0+ 中可用,如果為較舊的伺服器版本指定,則會在執行時導致例外狀況。

limit(限制) 整數

要返回的最大文件數。如果未指定,則預設為無限制。限制為 0 等同於設定無限制。

負限制將被解釋為正限制,並將 "singleBatch" 選項設定為 true。支援此行為是為了向後相容,但應視為已棄用。

max(最大值) 陣列|物件

特定索引的不包含上限。

如果未指定,則會使用已棄用的 "$max" 修飾符。

maxAwaitTimeMS(最大等待時間,毫秒) 整數

正整數,表示伺服器在沒有可用數據時阻塞 getMore 操作的時間限制(以毫秒為單位)。此選項應僅與 "tailable""awaitData" 選項一起使用。

maxScan(最大掃描數量) 整數
警告

此選項已棄用,不應使用。

正整數,表示執行查詢時要掃描的最大文件數或索引鍵數。

如果未指定,則會使用已棄用的 "$maxScan" 修飾符。

maxTimeMS(最大時間,毫秒) 整數

處理游標操作的累積時間限制(以毫秒為單位)。MongoDB 會在最早的下一個中斷點中止操作。

如果未指定,則會使用已棄用的 "$maxTimeMS" 修飾符。

min(最小值) 陣列|物件

特定索引的包含下限。

如果未指定,則會使用已棄用的 "$min" 修飾符。

修飾器 陣列 » 元運算子,用於修改查詢的輸出或行為。建議使用具名選項來取代這些運算子的使用。
noCursorTimeout 布林值 防止伺服器在閒置一段時間(10 分鐘)後讓閒置的游標逾時。
oplogReplay 布林值

複寫集的內部使用。要使用 oplogReplay,您必須在過濾器中包含以下條件

[ 'ts' => [ '$gte' => <timestamp> ] ]

注意此選項自 1.8.0 版本起已棄用。

projection 陣列|物件

» 投影規範,用於決定要在返回的文檔中包含哪些欄位。

如果您正在使用 ODM 功能 將文檔反序列化為其原始的 PHP 類別,請確保您在投影中包含 __pclass 欄位。這是反序列化運作所必需的,如果沒有它,擴充功能將會(預設)返回一個 stdClass 物件。

readConcern MongoDB\Driver\ReadConcern

要套用至操作的讀取關注。預設情況下,將使用來自 MongoDB 連線 URI 的讀取關注。

此選項在 MongoDB 3.2+ 中可用,如果為較舊的伺服器版本指定,將會在執行時導致例外。

returnKey 布林值

如果為 true,則只返回結果文檔中的索引鍵。預設值為 false。如果為 true 且 find 命令未使用索引,則返回的文檔將會是空的。

如果未指定,則會回到已棄用的 "$returnKey" 修飾器。

showRecordId 布林值

決定是否返回每個文檔的記錄識別碼。如果為 true,則會在返回的文檔中新增一個頂層的 "$recordId" 欄位。

如果未指定,則會回到已棄用的 "$showDiskLoc" 修飾器。

singleBatch 布林值 決定是否在第一批之後關閉游標。預設為 false
skip 整數 要略過的文檔數。預設為 0。
snapshot 布林值
警告

此選項已棄用,不應使用。

防止游標因中間的寫入操作而多次返回同一個文檔。

如果未指定,則會回到已棄用的 "$snapshot" 修飾器。

sort 陣列|物件

結果排序的排序規範。

如果未指定,則會回到已棄用的 "$orderby" 修飾器。

tailable 布林值 返回固定集合的可尾隨游標。

錯誤/例外

更新日誌

版本 說明
PECL mongodb 1.14.0

新增了 "let" 選項。"comment" 選項現在接受任何類型。

PECL mongodb 1.8.0

新增了 "allowDiskUse" 選項。

"oplogReplay" 選項已棄用。

PECL mongodb 1.5.0

"maxScan""snapshot" 選項已棄用。

PECL mongodb 1.3.0

新增了 "maxAwaitTimeMS" 選項。

PECL mongodb 1.2.0

新增了 "allowPartialResults""collation""comment""hint""max""maxScan""maxTimeMS""min""returnKey""showRecordId" 以及 "snapshot" 選項。

"partial" 選項重新命名為 "allowPartialResults"。為了向下相容,如果未指定 "allowPartialResults",仍然會讀取 "partial"

移除了過時的 "secondaryOk" 選項。對於使用舊版 wire protocol OP_QUERY 的查詢,驅動程式將根據 » 伺服器選擇規範,視需要設定 secondaryOk 位元。

PECL mongodb 1.1.0 新增了 "readConcern" 選項。

範例

範例 #1 MongoDB\Driver\Query::__construct() 範例

<?php
/* 選擇只有 "bjori" 撰寫且至少有 100 個瀏覽次數的文件 */
$filter = [
'author' => 'bjori',
'views' => [
'$gte' => 100,
],
];

$options = [
/* 只回傳符合條件文件中以下欄位 */
'projection' => [
'title' => 1,
'article' => 1,
],
/* 以瀏覽次數遞減排序回傳文件 */
'sort' => [
'views' => -1
],
];

$query = new MongoDB\Driver\Query($filter, $options);

$manager = new MongoDB\Driver\Manager('mongodb://127.0.0.1:27017');
$readPreference = new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::PRIMARY);
$cursor = $manager->executeQuery('databaseName.collectionName', $query, $readPreference);

foreach(
$cursor as $document) {
var_dump($document);
}

?>

另請參閱

新增註釋

使用者貢獻的註釋

此頁面沒有使用者貢獻的註釋。
To Top