【问题标题】:Firestore - Querying reference fieldFirestore - 查询参考字段
【发布时间】:2019-09-12 21:08:30
【问题描述】:

我正在开发一个小型 iOS 应用,使用 Swift 和 Cloud Firestore 数据库。

我有一个集合(A),其中每个文档都包含引用另一个集合(B)的字段。为什么问题是如何查询该字段?

  1. 我通过执行一个简单的查询获得了对 B 的引用
     let doc =  "merchant"

     let ref =  db.collection(doc).whereField("subscribers",arrayContains: Session.current.user!.uid!)
  1. 然后我要做的是将ref 中的值与集合A 中的参考字段进行比较
   db.collection("appointment").whereField("merch_ref", isEqualTo: ref).addSnapshotListener { snapshot, error in

        if let snap = snapshot {
            for item in snap.documents {
                print(item.data())
            }
        }
    }

当我执行时出现错误

由于未捕获的异常而终止应用程序 'FIRInvalidArgumentException',原因:'不支持的类型:FIRQuery'

你能指出正确的方向吗

谢谢

【问题讨论】:

    标签: ios swift firebase google-cloud-firestore


    【解决方案1】:

    这是我如何使用引用类型来查询集合(node.js):

    let myCollectionADocument = await admin.firestore().collection("collection_a").doc("documentId").get();
    let myCollectionB = await admin.firestore().collection("collection_b").where("collection_a_id", "==", myCollectionADocument.ref).get();
    

    【讨论】:

      【解决方案2】:

      您的ref 实际上不是文档引用类型对象。编译器告诉你它是一个Query 类型的对象。它只包含您定义的查询的所有参数。它实际上没有任何文档数据。

      如果您想从该查询对象中获取匹配的文档,您应该按照documentation 中的说明进行操作。您将需要执行查询,迭代结果快照,并将这些结果用作比较的基础。

      【讨论】:

      • 是的,我确实试图避免迭代,但我想你是对的。如果您可以在集合中保持字段同步,那就太好了。谢谢
      猜你喜欢
      • 2019-01-12
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      • 2019-01-16
      • 2018-08-20
      相关资源
      最近更新 更多