2013-07-01 87 views
2

我試圖找出最佳方式來篩選CouchBase中的多個字段,當我過濾的值不是連續的。舉例來說,如果我有一個表叫產品這些領域:couchbase過濾多個字段

  • 產品編號

  • 的CategoryId

  • ProductTypeId

  • 價格

我試圖達到這樣的過濾器:

SELECT * FROM Product WHERE CategoryID IN (1,5,7) AND ProductTypeId 
IN (10, 12); 

是這樣做是爲了對各個領域的看法,使用鍵運行作爲查詢的最佳方法(例如by_categoryId?keys=[1,5,7]),然後在應用程序代碼中壓縮結果?還是有更好的方法來做到這一點? (我不認爲我可以使用範圍查詢作爲數組元素不會連續)。

回答

2

在couchbase中,簡單視圖只能有一個索引,所以不能使用它過濾2個或更多個字段。在couchbase中也有空間視圖具有二維索引,但是

地理空間支持作爲Couchbase Server 2.0中的一個實驗性功能引入。此功能目前不受支持,僅供演示和測試之用。

因此,第一個變體:從一個字段過濾得到較少結果的字段獲取記錄,然後在應用程序一側,您可以過濾另一個字段的結果。

第二種變體:您可以在應用程序端創建類似於「CategoryID:ProductTypeID」(即1:10, 1:12, 5:10, 5:12, 7:10, 7:12)的對,並創建生成該對的視圖(即emit(doc.catId + ":" + doc.prodTypeId))並查詢它。

第三個變體(我更喜歡):使用它的關係數據庫。我在你的Product有4個字段計算3個關係 - 這是75%,你有關係數據模型!而NoSQL的定義是Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontally scalable。或者可能是您可以更改您的數據模型...

0

您可以使用Couchbase(v3)中的新N1Q1查詢語言。您可以在查詢中表達所有「WHERE」條件而不創建任何視圖。

在線N1QL tutorial

+0

嘗試雖然這將是未來的正確答案,N1QL不couchbase服務器的當前版本。希望N1QL附帶的二級索引功能也能幫助解決這個問題。 – captncraig