在火力地堡,您可以查询使用单个值或值范围,所以构建一个查询以获得项目配套的几个关键词是不会成为可能。但是,您可以安排数据库,以便轻松查询或使用单个关键字。然后你需要几个查询组合等
你可以安排你这样的数据:
{
"items": {
"item1_id": {
"brand_id": ...,
"itemName": ...,
"price": ...,
"keywords": {
"black": true,
"t-shirt": true
}
}
}
}
然而,如this answer解释,你需要定义为每个关键字的索引。为了能够有效的基于关键字的查询,您可以创建自己的关键字映射到项目:
{
"items": {
"item1_id": {
"brand_id": ...,
"itemName": ...,
"price": ...,
"keywords": {
"black": true,
"t-shirt": true
}
}
},
"keywords": {
"black": {
"item1_id": true
},
"t-shirt": {
"item1_id": true
}
}
}
为关键字的查询将是这样的:
let keyword = "black";
database.ref(`keywords/${keyword}`).once("value", (snapshot) => {
snapshot.forEach((idSnapshot) => {
database.ref(`items/${idSnapshot.key}`).once("value", (itemSnapshot) => {
console.log(JSON.stringify(itemSnapshot.val()));
});
});
});
有维护自己的关键字到项目的映射有点痛苦,但查询速度会很快。此外,Firebase的多位置更新可以使维护关键字映射更容易一些。要创建一个项目:
database.ref().update({
"items/item1_id": {
"brand_id": ...,
"itemName": ...,
"price": ...,
"keywords": {
"black": true,
"t-shirt": true
}
},
"keywords/black/item1_id": true,
"keywords/t-shirt/item1_id": true
});
要更改项目的关键字(删除black
,加blue
离开t-shirt
不变):
database.ref().update({
"items/item1_id/keywords": {
"black": null,
"blue": true
},
"keywords/black/item1_id": null,
"keywords/blue/item1_id": true
});
并删除一个项目:
database.ref().update({
"items/item1_id": null,
"keywords/blue/item1_id": null,
"keywords/t-shirt/item1_id": null
});
你打算有基于关键字的查询? – cartant
是的,我愿意!如果一个人想要搜索一个基于类似......的东西......“黑色,T恤,设计......“@cartant –