Новичок в Firebase / FireStore и не имеет опыта работы с NoSQL.
Изучая Android и создавая приложение для себя, я понял, что мне нужно решение для работы с базами данных в реальном времени. Но я застрял в построении модельной структуры.
Это формат JSON:
{
"published": "date",
"title": "This is the title",
"content": "This is the body",
"tags": [
"tag1", "tag2"
]
}
Проблема заключается в отношении tags "многие ко многим". Понятно, что FireStore может решить эту проблему с помощью индексации, но как мне структурировать данные с помощью коллекций и документов? Кто-нибудь может подробно объяснить?
Я сейчас запутался, но я думаю, что это строки, поправьте меня, если я ошибаюсь.




Предполагая, что фрагмент вашего вопроса является объектом 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:
Each document contains a set of key-value pairs. Cloud Firestore is optimized for storing large collections of small documents.
Так что это лучшая структура базы данных, которую я могу придумать для вашего приложения, и, как вы можете видеть, свойство tags - это не array, а map. Это лучшая практика, когда дело доходит до такого рода объектов. См. Также официальную документацию по работа с массивами, списками и наборами.
Изменить 13 августа 2018:
Согласно обновленной документации, касающейся членство в массиве, теперь можно фильтровать данные по значениям массива с помощью метода whereArrayContains(). Простой пример:
CollectionReference citiesRef = db.collection("cities");
citiesRef.whereArrayContains("regions", "west_coast");
This query returns every city document where the regions field is an array that contains west_coast. If the array has multiple instances of the value you query on, the document is included in the results only once.
Для этого конкретного варианта использования есть еще лучшая страница документации: firebase.google.com/docs/firestore/solutions/arrays. Обратите внимание, что это скоро изменится, так как в настоящее время ведется работа над набором операций с массивом.
@FrankvanPuffelen Привет, Пуф! Разве ваша ссылка не совпадает с той, которую я добавил в конце своего ответа? Кстати, не могу дождаться новых изменений :)
Вупс. Да, пропустил: заметил только первую ссылку. :-) Извини за это.
@AlexMamo Спасибо за быстрый ответ. Немного скептически отношусь к тому, как это работает, возможно, успешная транзакция поможет мне понять. А пока, пожалуйста, останься со мной.
Хорошо, держи меня в курсе.
Я думаю, тебе стоит использовать это
Почта:
{
"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"
}
]
теги - строки или документы?