#firebase #google-cloud-firestore
#firebase #google-облако-firestore
Вопрос:
У меня есть несколько документов в firestore, в которых есть несколько полей. подобная коллекция «details» выглядит следующим образом
{
id: "",
fields1: "",
userFK: Reference to users collection
}
Теперь мне нужно разрешить userFK «на лету», это означает, что я не хочу сначала извлекать все документы, а затем запрашивать у userFk userFK.get()
Существует ли какой-либо метод, подобный выполнению $lookup
whick, поддерживаемый в mongodb
Даже в некоторых случаях я хочу извлекать документы из коллекции «details» на основе некоторых конкретных полей в users
Ответ №1:
Не существует способа получить документы нескольких типов из Firestore с помощью одной операции чтения. Чтобы получить пользовательский документ, на который ссылается userFK
, вам придется выполнить отдельную операцию чтения.
Это нормально при использовании баз данных NoSQL, таких как Cloud Firestore, поскольку они обычно не поддерживают какой-либо серверный эквивалент инструкции SQL JOIN
. Производительность загрузки этих дополнительных сведений не так плоха, как вы можете подумать, поэтому обязательно измерьте, сколько времени требуется для вашего варианта использования, прежде чем списывать это как неосуществимое.
Если эта дополнительная нагрузка является непомерно высокой для сценария, альтернативой является дублирование необходимых данных пользователя в каждый документ сведений. Таким образом, вместо того, чтобы хранить только ссылку на их документ, вы бы, например, также сохранили имя пользователя.
Это увеличивает объем работы при операции записи, но упрощает операции чтения и делает их более масштабируемыми. Это обычный компромисс между пространством и временем, когда в базах данных NoSQL вы часто обмениваете время на пространство: таким образом, сохраняя дублирующиеся данные.
Если вы новичок в моделировании данных NoSQL, я настоятельно рекомендую: