2017-01-30 47 views
0

我嘗試爲網上商店提供Firebase實時DB結構。 商店應該有一個產品集合,每個產品可以屬於一個或多個類別。是否有可能構建一個查詢,以便使用單個HTTP請求(假設我使用Firebase REST API)獲取computers類別中的所有產品?下面是一個簡單的數據塊:查詢Firebase中的孫子屬性

{ 
    "products": { 
    "-KaXxv2xD9WaIqHMsHYM": { 
     "title": "Item 1", 
     "categories": { 
     "electronics": true, 
     "computers": true 
     } 
    }, 
    "-KaXyvdw5gmuBmGi5unb": { 
     "title": "Item 2", 
     "categories": { 
     "electronics": true 
     } 
    }, 
    "-KaXyyyzmP9Y6askhLdx": { 
     "title": "Item 3", 
     "categories": { 
     "computers": true 
     } 
    } 
    } 
} 

我也嘗試使用數組爲categories,但看起來像陣列的支持在火力地堡非常有限,他們應該避免。

UPDATE:

此查詢的工作:

GET /products.json?orderBy="categories/computers"&equalTo=true 

但是,它需要爲每一個類別的一個指標:

{ 
    "rules": { 
    "products": { 
     ".indexOn": ["categories/computers", "categories/electronics"] 
    } 
    } 
} 

回答

0

你應該有具有products額外categories節點名單。這將使特定類別的產品更容易和更有效地訪問。

Firebse樣本使用類似的aproach。 See code

childUpdates.put("/posts/" + key, postValues); 
    childUpdates.put("/user-posts/" + userId + "/" + key, postValues); 

他們保存在postsuser-posts節點相同的數據。

+0

我正在考慮一個單獨的'categories'節點,但它只會保留產品ID映射的類別,這意味着如果我想在類別中顯示前50個產品的頁面,則需要發出51個HTTP請求。 –

+1

其實你應該在分類節點下保留完整的產品信息。 Firebase樣本中也顯示了類似的情況。我編輯了我的答案。但請等待其他答案,因爲我真的想知道解決方案。 – Devrim

+0

我明白了,謝謝。這是不幸的,保持所有的地方同步爛。每當我更新產品說明時,我都需要瀏覽所有類別並在此處修復。我不希望NoSQL數據存儲能夠提供複雜的查詢功能,但Firebase在這方面看起來太侷限了。 –