Как структурировать JSON Firestore для отношения API "многие ко многим" в блоге
Новичок в Firebase/FireStore и не имеет никакого опыта в NoSQL
,
Изучая Android, а также создавая приложение для себя, я поняла, что мне нужно решение для базы данных в реальном времени. Но я застрял в построении структуры модели.
Это формат JSON:
{
"published": "date",
"title": "This is the title",
"content": "This is the body",
"tags": [
"tag1", "tag2"
]
}
Проблема с tags
отношение многих ко многим. Понял, что FireStore может решить эту проблему с помощью индексации, но как мне структурировать данные с помощью коллекций и документов? Кто-нибудь может объяснить в деталях?
2 ответа
Предполагая, что фрагмент в вашем вопросе является post
объект, я рекомендую вам схему базы данных, которая выглядит следующим образом:
Firestore-root
|
--- posts (collection)
|
--- postId (document)
|
--- published: "date"
|
--- title: "This is the title"
|
--- content: "This is the body"
|
--- tags
|
--- tag1: true
|
--- tag2: true
В соответствии с официальной документацией о данных моделирования в базе данных Cloud Firestore:
Каждый документ содержит набор пар ключ-значение. Cloud Firestore оптимизирован для хранения больших коллекций небольших документов.
Так что это лучшая структура базы данных, которую я могу придумать для вашего приложения, и, как вы можете видеть, tags
собственность не array
это map
, Это лучшая практика, когда дело доходит до такого рода объектов. Пожалуйста, ознакомьтесь с официальной документацией по работе с массивами, списками и наборами.
Изменить 13 августа 2018 года:
Согласно обновленной документации, касающейся членства в массиве, теперь можно фильтровать данные на основе значений массива, используя whereArrayContains()
метод. Простой пример будет:
CollectionReference citiesRef = db.collection("cities");
citiesRef.whereArrayContains("regions", "west_coast");
Этот запрос возвращает каждый городской документ, где поле регионов представляет собой массив, содержащий west_coast. Если в массиве есть несколько экземпляров значения, по которому вы запрашиваете, документ включается в результаты только один раз.
Я думаю, вы должны использовать это
Сообщение:
{
"published": "date",
"title": "This is the title",
"content": "This is the body",
"tags": [
"xxx", "yyy"
]
}
Теги
[
{
"tag_id":"xxx",
"tag_name":"abc"
},
{
"tag_id":"yyy",
"tag_name":"abc"
}
]