Сводка
Как я могу смоделировать свою базу данных в Firebase, чтобы, например, обзоры на определенной c странице обновлялись информацией о пользователях, то есть если пользователь меняет свой аватар или имя, обзоры также должны отображать обновленные данные пользователя. Большую часть времени я использовал MongoDB с Mon goose, а сейчас я работаю над мобильным приложением с Firebase. В Mon go я просто сохраню ссылку на пользователя в обзоре и заполню поле, чтобы получить данные, которые мне нужны из документа. Есть ли что-то подобное в Firebase и является ли это хорошей или приемлемой практикой?
Быстрые вопросы
- Есть ли что-то вроде «.populate ()» в Firebase?
- Следует ли мне моделировать документы в максимально возможной степени, чтобы иметь данные, которые будут использоваться в
view
, и избегать «объединений»?
Пример
Мы иметь коллекцию пользователей и коллекцию магазина с отзывами в ней.
Насколько я читал, вы должны минимизировать чтение do c, и поэтому мы должны моделировать наши данные со спецификациями c значения, которые нам нужны для view
, где они будут использоваться, так что нам нужно выполнить только один запрос.
Для упрощения скажем:
У пользователя есть имя, адрес электронной почты, аватар
users: {
user_id_1: {
email: "user1@gmail.com",
name: "John Doe",
avatar: "some_firestore_url"
}
}
Если в коллекции магазина:
- Есть вложенная коллекция отзывов, подобная этой
stores: {
store_id_1: {
name: "Dat Cool Store!",
reviews: {
user_id_1: {
name: "John Doe",
avatar: "some_firestore_url",
text: "Great store love it!",
timestamp: "May 07, 2020 at 03:30"
}
}
}
}
Проблема, которую я вижу здесь, заключается в том, что, если мы не используем функцию, которая обновляет каждое поле в каждом документе w с новыми значениями нет другого способа обновить данные в имени и аватаре.
Укажите user_id в поле и запросите информацию о пользователе после:
stores: {
store_id_1: {
name: "Dat Cool Store!",
reviews: {
review_id_1: {
user: "user_id_1",
text: "Great store love it!",
timestamp: "May 07, 2020 at 03:30"
}
}
}
}
Это имитация способа, которым я бы сделал в MongoDB.
Извините, если это звучит сбивающе с толку, или я не объяснил себя наилучшим образом, но здесь 4 часа утра, и я просто пытаюсь понять это правильно :)