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

Posted

技术标签:

【中文标题】Firestore 如何存储对文档的引用/如何检索它?【英文标题】:Firestore how to store reference to document / how to retrieve it? 【发布时间】:2018-10-05 09:08:03 【问题描述】:

我是 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!")
        
    

【问题讨论】:

当你阅读文档并获得author字段时,它应该是一个文档参考,就像你第一次放在那里的那个一样。 那么我所做的存储参考的正确方法是什么?当我得到同样的字段时,它实际上是一个Any 类型。我试图投射它但没有成功。一旦我得到它,我应该在该字段上调用什么方法来访问它指向的实际文档? 【参考方案1】:

你只是少了一步。这也花了我一段时间才弄清楚。

首先,存储一个变量 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】:

这种方式非常适合我:

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!")
    

【讨论】:

以上是关于Firestore 如何存储对文档的引用/如何检索它?的主要内容,如果未能解决你的问题,请参考以下文章

从 Firestore 中检索文档引用的值

Firestore:如何从数组中检索数据并将其传递到表中?

使用 Firestore 进行多路径更新

对于与用户 uid 相同的文档 ID,如何从 Firestore 中仅检索一个用户的数据?

Cloud Firestore:如何在我的集合查询中获取文档引用并将其映射为 JSON 值?

我如何在 firebase firestore android 中检索文档以匹配我的特定登录凭据