Я пытаюсь создать структуру базы данных Firebase реального времени для интернет-магазина. Магазин должен иметь коллекцию продуктов, каждый продукт может принадлежать одной или нескольким категориям. Можно ли построить запрос для получения всех продуктов в категории computers
с одним HTTP-запросом (если я использую API-интерфейс Firebase REST)? Вот пример часть данных:Querying grandchild properties in Firebase
{
"products": {
"-KaXxv2xD9WaIqHMsHYM": {
"title": "Item 1",
"categories": {
"electronics": true,
"computers": true
}
},
"-KaXyvdw5gmuBmGi5unb": {
"title": "Item 2",
"categories": {
"electronics": true
}
},
"-KaXyyyzmP9Y6askhLdx": {
"title": "Item 3",
"categories": {
"computers": true
}
}
}
}
Я также пытался использовать массивы для categories
но выглядит как поддержка массивов очень ограничена в Firebase и их следует избегать.
UPDATE:
Этот запрос работает:
GET /products.json?orderBy="categories/computers"&equalTo=true
Но это требует индекс для каждой категории:
{
"rules": {
"products": {
".indexOn": ["categories/computers", "categories/electronics"]
}
}
}
Я думал об отдельном узле 'categories', но он будет отображать только категории для сопоставления идентификаторов продуктов, это означает, что если я хочу отобразить страницу с 50 наименованиями в категории, мне нужно будет сделать 51 запрос HTTP , –
На самом деле вам следует лучше хранить полную информацию о продукте в разделе категории. Это также показано в образцах Firebase для вашего аналогичного случая. Я отредактировал свой ответ. Но, пожалуйста, подождите другие ответы, потому что я действительно удивляюсь решениям. – Devrim
Я вижу, спасибо. Это несчастливо, сохраняя все места в синхронизации. Всякий раз, когда я обновляю описание продукта, мне нужно пройти все его категории и исправить его. Я не ожидаю сложных запросов из хранилища данных NoSQL, но Firebase выглядит слишком ограничивающим в этом отношении. –