는 중포 기지에서 그렇게 여러 키워드입니다 일치하는 항목을 얻을 수있는 하나의 쿼리를 작성, 단일 값 또는 값 범위를 사용하여 조회 할 수 있습니다 가능하지 않을거야. 그러나 쉽게 쿼리하거나 단일 키워드를 사용할 수 있도록 데이터베이스를 정렬 할 수 있습니다. 그런 다음 당신은 이런 식으로 데이터를 정렬 할 수 등
, 여러 쿼리를 결합해야 것 : this answer에 설명 된대로
{
"items": {
"item1_id": {
"brand_id": ...,
"itemName": ...,
"price": ...,
"keywords": {
"black": true,
"t-shirt": 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()));
});
});
});
:
이
{
"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
예! 사람이 .... "검은 색, 티셔츠, 디자인 .. 등의 항목을 기반으로 검색하려고한다면"@cartant –