我有以下数据结构,并希望返回与标记关联的“产品”。是否有可能通过当前的数据结构实现这一目标?如果没有,我应该如何构建数据,以及返回所有具有“Tag 2”的“产品”的查询是什么样的?
{
"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)
提前致谢!
答案 0 :(得分:7)
如果您按照以下方式重组数据:
"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"
}
}
您可以使用深层路径查询来获取具有特定标记的产品:
firebase.database()
.ref('products')
.orderByChild('tags/Tag1')
.equalTo(true)
.once('value', function (products) {
console.log(products.val());
});
请注意,只有当您拥有固定数量的已知标记时,此方法才有效,因为每个标记都需要索引。