代码之家  ›  专栏  ›  技术社区  ›  Scaraux

Firestore如何存储对文档的引用/如何检索?

  •  8
  • Scaraux  · 技术社区  · 6 年前

    我是Firestore/Firebase的新手,我正在尝试创建一个新文档,其中一个字段是 document reference 到其他文档。我已经阅读了Firebase的所有指南和示例,但没有找到任何。。。

    此外,当我检索我创建的这个文档时,我将能够访问我在其中添加的引用中的内容。我不知道怎么做。

    下面是我为创建部件尝试的一些代码

        let db = Firestore.firestore()
    
        // Is this how you create a reference ??
        let userRef = db.collection("users").document(documentId)
    
        db.collection("publications").document().setData([
            "author": userRef,
            "content": self.uploadedImagesURLs
        ]) { err in
            if let err = err {
                print("Error writing document: \(err)")
            } else {
                print("Document successfully written!")
            }
        }
    
    2 回复  |  直到 6 年前
        1
  •  12
  •   abraham    6 年前

    你只是错过了一步。这也花了我一段时间才弄明白。

    首先,存储一个变量DocumentReference!

    var userRef: DocumentReference!
    

    然后,您要创建指向文档ID的指针,并从中创建文档引用<-您缺少的这部分

    if let documentRefString = db.collection("users").document(documentId) {
      self.userRef = db.document("users/\(documentRefString)")
    }
    

    最后,继续将数据保存到数据库

    db.collection("publications").document().setData([
        "author": userRef,
        "content": self.uploadedImagesURLs
    ]) { err in
        if let err = err {
            print("Error writing document: \(err)")
        } else {
            print("Document successfully written!")
        }
    }
    

    希望有帮助!

        2
  •  0
  •   Leonardo Saragiotto    5 年前

    这种方式非常适合我:

    let db = Firestore.firestore()
    let documentRefString = db.collection("users").document(documentID)
    let userRef = db.document(documentRefString.path)
    

    然后,设置数据的时间:

    db.collection("publications").document().setData([
        "author": userRef,
        "content": self.uploadedImagesURLs
    ]) { err in
        if let err = err {
            print("Error writing document: \(err)")
        } else {
            print("Document successfully written!")
        }
    }