javascript - Denormalize Firebase Data For Tag Search - Stack Overflow

I have the following data structure and would like to return the "products" associated with a

I have the following data structure and would like to return the "products" associated with a tag. is it possible to achieve this with the current data structure? If not, how should I structure the data, and what would the query look like to return all "products" that have "Tag 2" for example?

{
  "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",

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

    }
  }
}

My last attempt was this:

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

Obviously no success.. This however does return all "products" with a tag:

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

Thanks in advance!

I have the following data structure and would like to return the "products" associated with a tag. is it possible to achieve this with the current data structure? If not, how should I structure the data, and what would the query look like to return all "products" that have "Tag 2" for example?

{
  "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.",

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

    }
  }
}

My last attempt was this:

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

Obviously no success.. This however does return all "products" with a tag:

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

Thanks in advance!

Share asked Dec 3, 2016 at 20:55 MacDMacD 5863 gold badges9 silver badges28 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 10

If you restructure your data like this:

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

You can use a deep-path query to obtain the products that have a particular tag:

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

Note that this approach will work only if you have a fixed number of known tags, as an index will be required for each tag.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1742295079a4416952.html

相关推荐

  • javascript - Denormalize Firebase Data For Tag Search - Stack Overflow

    I have the following data structure and would like to return the "products" associated with a

    17小时前
    20

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信