#typescript #firebase #google-cloud-firestore
#typescript #firebase #google-облако-firestore
Вопрос:
Я использую веб-API, Typescript, никаких других библиотек.
Я настроил очень простую базу данных. Пользователи регистрируются с помощью электронной почты / пароля, и документ добавляется в /users
коллекцию с их uid в качестве ключа. Когда пользователь входит в систему, я сверяю его uid с /users
коллекцией и возвращаю соответствующий документ.
Я возился с правилами безопасности, проверял свою логику и регулярно вручную удалял пользователей и данные через консоль Firebase по ходу работы. Я не знаю, что-то перепуталось, но теперь моя база данных полностью пуста в соответствии с вкладкой данных консоли — нет /users
коллекции или чего-то еще — но когда я запускаю…
this.db.doc(`users/${firebase.auth().currentUser.uid}`).get()
… Я получаю обратно документ с правильным идентификатором (соответствует моему зарегистрированному идентификатору пользователя), но exists
свойство есть false
. Откуда это берется?
Поскольку база данных пуста, я предполагаю, что она из какого-то локального кэша?
Или я что-то перепутал или вышел из синхронизации, удалив данные вручную?
Могу ли я очистить этот кеш или мне нужно выполнить дополнительную проверку на exists:false
Приветствую всех
Ответ №1:
Я получаю обратно документ с правильным идентификатором (соответствует моему зарегистрированному идентификатору пользователя), но свойство exists равно false . Откуда это берется?
Вы всегда получите DocumentSnapshot для любого отдельного документа get()
. Именно так это и работает. Вам обязательно нужно проверить флаг exists (или посмотреть, который data()
возвращает объект), чтобы узнать, есть ли какие-либо данные в этом снимке. На самом деле это не сложнее, чем это.
Комментарии:
1. @shn: Я понимаю вопрос так же, как и Дуг здесь.
DocumentReferenceget()
Вызов всегда возвращаетDocumentSnapshot
объект, даже если в базе данных (или кеше) нет документа. Если действительно такого документа не существует,exists
свойствоDocumentSnapshot
`false .2. Ах, хорошо, итак, тот факт, что идентификатор соответствует запросу, объясняется только тем, что он возвращается на основе этого запроса, а не потому, что у него есть какая-то кэшированная версия более старого экземпляра. Это имеет смысл (я думаю) и может даже объяснить другое странное поведение, которое я видел. Сейчас я занимаюсь чем-то другим, но проверю это сегодня вечером в своей сборке.
3. Идентификатор в DocumentSnapshot всегда будет точно таким, какой вы использовали в DocumentReference . Обратите внимание, что DocumentSnapshot также используется в результатах запроса, где вы не знаете идентификаторы заранее. В этом контексте идентификатор является более полезной информацией.
4. Да, теперь все начинает обретать смысл. Вроде как 🙂 Приветствую ответ. Я уверен, что скоро вернусь с большим количеством.