2016-10-18 2 views
0

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

Итак, мой вопрос в том, должен ли я структурировать атрибуты данных как массивы в firebase или объектах, или есть другой способ?

Я хотел бы фильтровать продукты с .eQualTo (или, если есть лучший способ) https://firebase.google.com/docs/reference/js/firebase.database.Query#equalTo

Пример 1)

{ 
name: "My red n' white product", 
color: ["white", "red"] 
} 

Пример 2)

{ 
name: "My red n' white product", 
color: {red: true, white: true} 
}, 
{ 
name: "My blue product", 
color: {blue : true} 
} 

Пример 3)?

ответ

2

несколько вещей, которые реализованы здесь:

  • Всякий раз, когда вы чувствуете необходимость хранить массив, но хотите сделать операцию на нем: вы, вероятно, хотите сохранить набор вместо этого. См. Мой предыдущий ответ здесь для получения более подробной информации: Setting arrays in Firebase using Firebase console

  • Даже если вы храните цвета в комплекте, у вас появятся такие вопросы, как: ref.orderByChild('color/blue').equalTo(true). Хотя этот запрос работает, он требует, чтобы у вас были индексы, определенные для ['color/blue', 'color/red', 'color/white']. Как только ваши категории/цвета будут динамическими, это будет невозможно, так как вы не можете программно добавлять индексы.

Более идиоматический способ моделирования этих данных состоит в том, чтобы «следить за прецедентом». Вы хотите получить список предметов для определенной категории/цвета. Таким образом, в этом случае, хранить список элементов для каждого цвета:

itemsByColor: { 
    red: { 
    keyOfRedAndWhiteProduct: true 
    }, 
    white: { 
    keyOfRedAndWhiteProduct: true 
    }, 
    blue: { 
    keyOfBlueProduct: true 
    } 
} 

Теперь вы можете легко посмотреть список ключей элементов, а затем загрузить их.

Я также рекомендую также прочитать Firebase guide on structuring data, в частности раздел на modeling data that scales. И эта статья на NoSQL data modeling обязательна для всех, кто перейдет на базу данных NoSQL.

Смежные вопросы