查詢選擇器語法
IBM Cloudant 查詢語言是以 JSON 物件來表達,描述所感興趣的文件。 在此結構中、 您可以使用特別命名的欄位來套用條件邏輯。
IBM Cloudant 查詢語言與 MongoDB 查詢文件有一些相似之處,但這些相似之處來自於目的的共通性,不一定延伸到功能或結果的等同性。
選擇器基礎
基本選擇器語法要求您指定一個或多個欄位、 以及這些欄位所需的對應值。 下面的示例選擇器匹配所有
director 欄位包含 Lars von Trier 值的文件。
請參閱以下簡單選擇器的範例:
{
"selector": {
"director": "Lars von Trier"
}
}
如果您在建立索引時指定 "type":"text" 來建立全文本索引、 您可以使用 $text 運算符號選擇匹配的文件。 在以下範例中、 檢查全文索引,找出任何包含 Bond 一詞的文件。
請參閱以下 Full_text 索引的簡單選擇器範例:
{
"selector": {
"$text": "Bond"
}
}
您可以透過結合運算元,建立更複雜的選擇表達式。 然而、 對於 IBM Cloudant 類型的查詢索引 json、 您不能使用 $regex 等「組合」或「陣列邏輯」運算元作為查詢的基礎。 只有相等運算符如 $eq、
$gt,
$gte,
$lt, 和 $lte- 但不包括 $ne- 可以用作更複雜的查詢基礎。 如需更多關於建立複雜選擇器表達式的資訊,請參閱建立選擇器表達式、 請參閱 建立選擇器表達式。
具有兩個欄位的選擇器
在以下範例中、 選擇器匹配任何具有 name 欄位且包含 Paul、
且 location 欄位的值為 "Boston "的任何文件。
請參閱以下更複雜的選擇器範例:
{
"selector": {
"name": "Paul",
"location": "Boston"
}
}
子領域
使用更複雜的選擇器來指定巢狀物件欄位的值、 或子欄位。 例如 您可以使用標準的 JSON 結構來指定欄位和子欄位。
請參閱以下 JSON 物件中欄位和子欄位選擇器的範例:
{
"selector": {
"imdb": {
"rating": 8
}
}
}
縮寫等同使用點符號將欄位和子欄位名稱合併為單一名稱。
請參閱以下使用點代號的欄位和子欄位選擇器等效範例:
{
"selector": {
"imdb.rating": 8
}
}
建立更複雜的選擇器表達式
一般而言、 每當您有一個運算符號需要一個參數、 該參數本身可以是另一個有自己參數的運算符號。 此擴充功能可讓您使用更複雜的選擇器表達方式。
當使用 JSON 類型的索引時,組合或陣列邏輯運算符號 (例如 $regex,) 可能會導致全 數據庫掃描。 當您使用 JSON 類型的索引時,可能會導致完整的資料庫掃描、 導致效能不佳。 只有相等運算符號,例如 $eq、
$gt, $gte, $lt,和 $lte (但不包括 $ne),啟用索引查詢。 為了確保有效使用索引,請分析每個查詢的
解釋計劃 每個查詢。
大多數選擇表達式的運作方式與您所期望的運算符號完全相同。
$regex 運算符號使用的匹配演算法目前是基於
Perl Compatible Regular Expression(PCRE)函式庫。 然而,並非所有 PCRE 函式庫都已實作。 此外,
$regex 操作員的某些部分超出了 PCRE 所提供的範圍。 有關實作的詳細資訊、 請參閱 Erlang 正規表達資訊。
使用 $text 運算符號
$text 運算符號是基於 Lucene 搜尋與標準分析器。 運算符號不區分大小寫,並且可以匹配任何字詞。 但是、
$text 運算符號並不支援完整的 Lucene 語法、 例如通配符、 模糊匹配、 或近似檢測。
如需詳細資訊、 請參閱 Search 文件。
$text 運算符號適用於在文件中找到的所有字串。 如果將此操作符放在欄位名稱的上下文中,則無效。