2

私は以下のデータ構造を持っており、タグに関連付けられた「製品」を返したいと思います。現在のデータ構造でこれを達成することは可能でしょうか?そうでない場合は、データをどのように構造化し、「タグ2」を持つすべての「商品」を返すようにクエリをどのように見えるでしょうか?タグ検索のためのFirebaseデータの非正規化

{ 
    "accounts" : { 
    "-KRPU3FyKT4oPWHYjDrr" : { 
     "userId" : "1" 
    }, 
    "-kjnsvakljsndfme;lnmv" : { 
     "userId" : "2" 
    } 
}, 

    "products" : { 
    "-KXcnfob3Vo3s8bL9WSI" : { 
     "name" : "Product 1", 
     "description" : "Description of product 1", 
     "tags" : [ "Tag 1", "Tag 2", "Tag 3", "etc." ], 
     "url" : "websiteURL1.com", 

    }, 
    "-KXcnfob3Vo3s8bL9WSI" : { 
     "name" : "Product 2", 
     "description" : "Description of product 2", 
     "tags" : [ "Tag 1", "Tag 2", "Tag 3", "etc." ], 
     "url" : "websiteURL2.com", 

    } 
    } 
} 

私の最後の試みはこれだった:明らかに

firebase.database().ref.child('products').orderByChild('tags').equalTo("Tag 1").once('value', function(products) 

なし成功.. しかし、これはタグですべての "製品" を返すん:事前に

firebase.database().ref.child('products').orderByChild('tags').once('value', function(products) 

感謝を!

答えて

6

あなたは、このようなあなたのデータを再構築した場合:このアプローチが動作することを

firebase.database() 
    .ref('products') 
    .orderByChild('tags/Tag1') 
    .equalTo(true) 
    .once('value', function (products) { 
    console.log(products.val()); 
    }); 

注:

"products" : { 
    "-KXcnfob3Vo3s8bL9WSI" : { 
    "name" : "Product 1", 
    "description" : "Description of product 1", 
    "tags" : { 
     "Tag1": true, 
     "Tag2": true 
    }, 
    "url" : "websiteURL1.com" 
    }, 
    "-KXcnfob3Vo3s8bL9WSI" : { 
    "name" : "Product 2", 
    "description" : "Description of product 2", 
    "tags" : { 
     "Tag3": true, 
     "Tag4": true 
    }, 
    "url" : "websiteURL2.com" 
    } 
} 

は、あなたが特定のタグを持った製品を得るために、深いパスのクエリを使用することができますの固定数のがある場合にのみ、各タグにインデックスが必要となります。

関連する問題