【问题标题】:Handle object field on Firestore with Swift使用 Swift 处理 Firestore 上的对象字段
【发布时间】:2018-03-18 21:07:30
【问题描述】:

我正在使用 Firebase Firestore 来保存我的应用的数据。我有一个对象的对象作为我的一个文档的字段,它看起来像这样:

所以,有语言对象,它有字段记录(Int)和字段日报(Object)。添加新数据的问题。

我找到了使用 SwiftJson 解析数据的方法。

let docRef = db.collection("users").document(uid).collection("activities").document(uid)

    docRef.getDocument { (qs, err) in
        if let err = err {
            print("Error retrieving document \(err.localizedDescription)")

        } else {
            if let document = qs {
                let doc = document.data()

                SVProgressHUD.dismiss()

                do {
                    let json = try JSON(doc)

                    for i in 0..<json["language"]["daily"].count {
                        print(json["language"]["daily"]["\(i + 1)"]["date"])
                        print(json["language"]["daily"]["\(i + 1)"]["points"])

                    }

                } catch {

                }

            }
        }
    }

该计划每天都会保存您生成的积分,这就是我拥有这个对象的原因。因此,问题是“每天”向对象添加一个新值。你会怎么做?或者您是否想到了另一种方法?

【问题讨论】:

    标签: swift firebase object google-cloud-firestore


    【解决方案1】:

    在大多数 NoSQL 数据库中,解决用例的关键是找到一个有效的模型来存储数据。

    在您的情况下,您似乎想要存储每个数据的点数。似乎每个日期只能获得一个积分。

    在这种情况下,使用日期作为存储点数的键是最有意义的。所以在你的示例文档中:

    language: {
      daily: {
        "2018-03-17": 1200,
        "2018-03-18": 1250
      },
      record: 1120
    }
    

    我所做的更改(以及原因):

    • 通过使用日期作为每日高分的键,数据模型可以定义为每天只有一个值。查找特定日期的高分也变得更容易,因为您可以在知道日期后确定前往该领域的直接路径,而不必遍历所有日报。
    • 我使用ISO-8601 format 表示日期,这样可以确保更轻松地对它们进行排序和过滤。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-17
      • 2021-10-21
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 2018-06-11
      相关资源
      最近更新 更多