2012-09-06 64 views
1

我使用CouchDB的存儲數據從各種來源和CouchDB的,Lucene的到來,讓即席查詢。這對我來說很重要,因爲我在Feed中顯示數據,並且希望此Feed可過濾。 CL對此似乎很完美。CouchDB的,Lucene和即席查詢,以驗證的用戶

不過,我也想權限介紹到飼料應用 - 用戶應該只能夠看到一個飼料項目,如果他/她看到它的權限。

現在,我希望能夠運行即席查詢,並且只返回當前已通過身份驗證的用戶有權讀取的供稿項目

我能弄清楚的唯一解決方案(到目前爲止)是爲每個供應商項目添加一個「權限」字段,我爲其他用戶存儲所有權限(顯然跳過沒有該項目權限的用戶在所有)

permissions: [{user_id: '123', read: true, write: true}, ...] 

然後在CL中索引此數組。

雖然這可能會工作,我覺得有種不好被迫窩在飼料項目的權限元......它甚至可能比保持它分開一個更好的解決辦法,但我就是不喜歡我在這裏似乎沒有選擇。

唯一的其他解決方案(除了轉儲CouchDB之外)將運行臨時查詢而不關心權限,然後在服務器上運行第二個查詢,選擇所有「我的項目」並執行設置交叉點。但是這些集合可能很大(如果我將它分塊,它可能需要很多DB請求=>很慢)。

是我的解決方案罰款或者是有什麼好?或者CouchDB不適合這樣的查詢?

乾杯!

回答

0

您是在保持對文件本身的許可數據在正確的道路上。這將是您稍後構建視圖的最簡單方法,這將使您能夠檢查用戶權限。所以不要擔心,只要讓它流向那個方向。嵌套數據可能來自以前的年齡,當你使用SQL和RDBMS'es時,你會想要將每個表格的地獄歸一化。這一次是完全不同:)

順便說一句,在CouchDB中做「連接」的唯一可能性是使用Linked Documents。如果你有興趣,你可以嘗試一下。然而,它不會讓您在創建視圖時查看鏈接文檔。