、あなたはとてもいくつかのキーワードに合致するアイテムを得るために、単一のクエリをされ構築、単一の値または値の範囲を使用して照会することができます可能ではないだろう。ただし、簡単にクエリを実行できるように、または単一のキーワードをデータベースに配置することもできます。あなた、あなたはこのようなあなたのデータを配置でき
など、いくつかのクエリを結合する必要があるだろう:
{
"items": {
"item1_id": {
"brand_id": ...,
"itemName": ...,
"price": ...,
"keywords": {
"black": true,
"t-shirt": true
}
}
}
}
しかし、this answerで説明したように、あなたは、各キーワードのインデックスを定義する必要があります。効率的なキーワードベースのクエリを可能にするには、アイテムにキーワードの独自のマッピングを作成することができます。あなた自身を維持する必要が
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()));
});
});
});
:
は
{
"items": {
"item1_id": {
"brand_id": ...,
"itemName": ...,
"price": ...,
"keywords": {
"black": true,
"t-shirt": true
}
}
},
"keywords": {
"black": {
"item1_id": true
},
"t-shirt": {
"item1_id": true
}
}
}
キーワードのクエリはこのようなものになるだろうキーワードのアイテムへのマッピングは少し苦しいですが、クエリは高速になります。また、Firebaseの複数の場所を更新することで、キーワードのマッピングを簡単に維持できます。アイテムのキーワード(、black
を削除blue
を追加し、そのままt-shirt
を残す)を変更するには
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
});
:
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 –