【问题标题】:How to get data from a map (object) Cloud Firestore document on Swift 4.2?如何从 Swift 4.2 上的地图(对象)Cloud Firestore 文档中获取数据?
【发布时间】:2018-10-21 14:36:24
【问题描述】:

我正在使用 Cloud Firestore 作为我的 iOS 应用程序的数据库。

当文档包含地图(对象类型)时,我想查询我的数据时遇到问题。我无法通过简单查询访问地图 (nameOnId) 的字段(例如:此处的名字)。

我的代码如下:

let db = Firestore.firestore()
    db.collection("userDetails").getDocuments() { (querySnapshot, err) in

        if let err = err {
            print("Error getting documents: \(err)")
        } else {
            for document in querySnapshot!.documents {
                let results = document.data()
                let result2 = results.compactMap({$0})
                print("listedItems: \(document.documentID) => \(result2[0].value)") }}}

我在某处读到,为了能够访问地图对象中的值,我需要展平地图对象,但这样做并不能让我访问它们,我唯一能接触到的是地图内的一组值,因此它只显示它们的键和值,例如:

{
firstName = "John";
middleName = "British";
middleName = "Citizen";
gender = "M";
DOB = "8 December 2000 at 00:00:00 UTC+11";
}

问题是如何使用查询访问像“John”这样的单个值?My data structure on Cloud Firestore

【问题讨论】:

    标签: ios swift google-cloud-firestore


    【解决方案1】:

    一种方法如下。还有一个很好的做法是不要强制解开您的 querySnapshot(如果查询不存在,您的应用程序将崩溃!)。希望这会有所帮助!

    let db = Firestore.firestore()
    db.collection("userDetails").getDocuments() { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else if let querySnapshot = querySnapshot {
            for document in querySnapshot.documents {
                let results = document.data()
                if let idData = results["nameOnID"] as? [String: Any] {
                    let firstName = idData["firstName"] as? String ?? ""
                    print(firstName)
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-09-30
      • 2021-09-01
      • 1970-01-01
      • 2021-06-03
      • 2023-04-02
      • 2021-05-27
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      相关资源
      最近更新 更多