2017-01-30 3 views
0

Я пытаюсь создать структуру базы данных 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"] 
    } 
    } 
} 

ответ

0

Вы должны иметь дополнительный categories узел, которые имеют products список. Это упростит и обеспечит эффективный доступ к продуктам для определенной категории.

Подобный aproach используется в образце Firebse. See code

childUpdates.put("/posts/" + key, postValues); 
    childUpdates.put("/user-posts/" + userId + "/" + key, postValues); 

Они сохранить те же данные в posts и user-posts узлов.

+0

Я думал об отдельном узле 'categories', но он будет отображать только категории для сопоставления идентификаторов продуктов, это означает, что если я хочу отобразить страницу с 50 наименованиями в категории, мне нужно будет сделать 51 запрос HTTP , –

+1

На самом деле вам следует лучше хранить полную информацию о продукте в разделе категории. Это также показано в образцах Firebase для вашего аналогичного случая. Я отредактировал свой ответ. Но, пожалуйста, подождите другие ответы, потому что я действительно удивляюсь решениям. – Devrim

+0

Я вижу, спасибо. Это несчастливо, сохраняя все места в синхронизации. Всякий раз, когда я обновляю описание продукта, мне нужно пройти все его категории и исправить его. Я не ожидаю сложных запросов из хранилища данных NoSQL, но Firebase выглядит слишком ограничивающим в этом отношении. –