Передача переменной в путь документа Firestore - PullRequest
1 голос
/ 06 июля 2019

Я пытаюсь сослаться на переменную, в которой хранится пользовательский UID, в документе, ссылающемся на Cloud Firestore.Путь, кажется, не читает строку, хотя.Я пробовал два разных способа, и оба способа дают мне ошибки.Как бы вы передали переменную строку в путь документа / коллекции Cloud Firestore?


Я получаю UsernameID из базы данных с:

UsernameID = Auth.auth().currentUser!.uid

var UsernameID = String()

let ref = db.collection("user/\(UsernameID)/account").document("created")
        ref.getDocument { (document, error) in
            if let document = document, document.exists {
                print("User Exists")
            } else {
                print("User does not exist in firestore")
            }
        }

Выдает ошибку:

*** Terminating app due to uncaught exception 'FIRInvalidArgumentException', reason: 'Invalid path (user//account). Paths must not contain // in them.'
libc++abi.dylib: terminating with uncaught exception of type NSException

var UsernameID = String()

let ref = db.collection("user").document(UsernameID).collection("account").document("created")
        ref.getDocument { (document, error) in
            if let document = document, document.exists {
                print("User Exists")
            } else {
                print("User does not exist in firestore")
            }
        }

Выдает ошибку:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'FIRESTORE INTERNAL ASSERTION FAILED: Invalid document reference. Document references must have an even number of segments, but user has 1'

Я также пытался сохранить uid как DocumentReferce, но не удалось сохранить строкув качестве ссылки на документ.

let UsernameID = DocumentReference!

Ответы [ 2 ]

1 голос
/ 06 июля 2019

Предполагая, что вы проходите аутентификацию правильно, вот что вы хотите сделать, чтобы получить доступ к документу, хранящемуся в Firestore. Предположим, что структура

users //collection
   uid //document
      name //field within the document

и код для чтения имени поля

let uid = Auth.auth().currentUser?.uid
let collectionRef = self.db.collection("users")
let userDoc = collectionRef.document(uid)
userDoc.getDocument(completion: { document, error in
     if let err = error {
         print(err.localizedDescription) //document did not exist
         return
     }

     if let doc = document {
         let name = doc.get("name")
         print(name)
     }
 })
0 голосов
/ 06 июля 2019

В вашем лучшем примере

db.collection("user/\(UsernameID)/account")

Похоже, вы не запрашиваете свою коллекцию пользователей. Вот почему вы получаете сообщение об ошибке в именах коллекций. Пользовательская коллекция должна быть примерно такой:

let ref = db.collection("user").document(UsernameID)
        ref.getDocument { (document, error) in
            if let document = document, document.exists {
                print("User Exists")
            } else {
                print("User does not exist in firestore")
            }
        }

.document должен получить документ пользователя, соответствующий переданному UsernameID. Чтобы получить свойство, вам необходимо получить к нему доступ через переменную документа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...