在火力地堡,您可以查詢使用單個值或值範圍,所以構建一個查詢以獲得項目配套的幾個關鍵詞是不會成爲可能。但是,您可以安排數據庫,以便輕鬆查詢或使用單個關鍵字。然後你需要幾個查詢組合等
你可以安排你這樣的數據:
{
"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 –