2015-01-11 47 views
2

我在Couchbase中有一組文檔,每個文檔可能有一些用戶作爲編輯器 - 一組用戶ID。在Couchbase中查詢「不在」

我想查詢所有的文檔,其中編輯器列表中的用戶使用特定的userid(用戶名)是而不是

這裏是我的數據是什麼樣子:

document1: {editors[1,2,3,4]} 
document2: {editors[1,2,3,4,5]} 

user{id:5} 

關於上面的數據 - 我怎樣才能查詢,其中ID爲用戶= 5不編輯數組中列出的類型文檔的所有文檔 - 這意味着只有文檔1應該返回?

回答

0

好吧,我有一個解決方案,適合我的要求。我在頁面中添加了分頁功能,這不會浪費太多資源。

基本上我返回100(取決於頁面大小)文檔類型「文檔」的每個週期。在每個循環中,我都會通過行列表並選擇僅登錄用戶未分配到的行。如果我有100行的頁面我返回然後,否則我去另一個週期(頁面大小),並嘗試添加缺少的行要返回的視圖。

這是非常醜陋的,但我不能看到任何簡單和輕鬆的解決方案沒有疑問。

另一件事被發現 - Telerik的LINQ to Couchbase

2

我想不出用Couchbase視圖做這件事的方法,因爲根據我的理解你的描述,這是文檔和用戶之間的多對多關係,你需要做一個「不在「查詢。 您可以輕鬆使用Couchbase的新查詢語言N1QL。目前它在開發人員預覽版中 - 這是否對您有用,取決於您需要多久才能將此代碼投入生產。如果你需要這一分鐘那麼它可能不是最好的解決方案。 另一種方法是使用Couchbase的ElasticSearch integration功能並在ElasticSearch中執行查詢,然後從Couchbase中檢索相關文檔。這也解決了這個任務,現在可以用於生產。

0

另一個選擇是在客戶端執行此操作。您可以在視圖中檢索所有文檔及其編輯器並遍歷該列表,並通過循環丟棄其中user_id 5出現在編輯器列表中的任何文檔。如果您不希望許多行符合「不在」條款,那麼通過這樣做不會浪費太多週期。 這對於N1QL來說是微不足道的。你可以快速設置並嘗試。開發人員預覽已經可用,我們正在努力在產品的下一個主要版本中發佈它。 謝謝 -cihan