2017-01-30 12 views
0

オンラインストアのFirebaseリアルタイムDB構造を思いつきます。 ストアには製品のコレクションが必要です。各製品は1つ以上のカテゴリに属する​​ことができます。 computersカテゴリのすべての製品を単一のHTTPリクエストで取得するためのクエリを作成することは可能ですか(Firebase REST APIを使用していると仮定します)。ここでは、データのサンプル片である: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のための配列を使用しようとしているが、アレイのサポートがFirebaseでは非常に限られており、彼らは避けるべきであるように見えますました。

UPDATE:

このクエリは動作します:

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

をしかし、それはすべての単一のカテゴリのインデックスが必要です。

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

答えて

0

あなたはproductsを持っている追加のcategoriesノードを持つべきですリスト。これにより、特定のカテゴリの製品へのより簡単で効率的なアクセスが可能になります。

Firebseサンプルでも同様の方法が使用されています。彼らはpostsuser-postsノードに同じデータを保存していSee code

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

+0

私は別の 'categories'ノードについて考えていましたが、カテゴリーだけをプロダクトIDマッピングに保持します。これは、カテゴリに上位50製品のページを表示したいのですが、 。 –

+1

実際には、カテゴリノードの下に完全な製品情報を保存してください。それはFirebaseのサンプルでも同様のケースが示されています。私は私の答えを編集しました。しかし、私は本当に解決策に疑問があるので、他の答えを待ってください。 – Devrim

+0

ありがとう、ありがとう。これは不幸なことです。すべての場所を同期させておくのは残念です。私が製品の説明を更新するたびに、私はすべてのカテゴリを通過してそれを修正する必要があります。 NoSQLデータストアの洗練されたクエリ機能は期待していませんが、この点に関してFirebaseはあまりにも制限されています。 –

関連する問題