查詢選擇器語法

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 運算符號適用於在文件中找到的所有字串。 如果將此操作符放在欄位名稱的上下文中,則無效。