swift - 使用 Swift 处理 Firestore 上的对象字段

标签 swift firebase object google-cloud-firestore

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

it looks like this

于是就有了语言对象,它有字段记录(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 {

                }

            }
        }
    }

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

最佳答案

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

就您而言,您似乎想存储每个数据的点数。似乎每个日期只能获得一个积分。

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

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

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

  • 通过使用日期作为每日高分的关键,根据定义,数据模型每天只能有一个值。查找特定日期的高分也变得更加容易,因为一旦知道日期,您就可以确定到达该字段的直接路径,而不必循环遍历所有日报。
  • 我使用ISO-8601 format日期,这确保可以更轻松地对它们进行排序和过滤。

关于swift - 使用 Swift 处理 Firestore 上的对象字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49352818/

相关文章:

ios - Alamofire ObjectMapper - 从所有模型中提取公共(public)字段并映射它们

javascript - 无法读取 Angular 中未定义的属性 'RecaptchaVerifier'

iOS : Firebase notification not working for user segment

javascript - 使用另一个属性值更改数组中对象的属性值

c++ - 不能在派生对象上运行虚函数

iphone - iOS对象数组:在函数内部创建对象数组

swift - RealityKit – 如何将视频素材添加到 ModelEntity?

objective-c - PHFetchOptions 持续时间无法正常工作

firebase - 仅允许来自特定域的请求读取和写入数据Firebase

objective-c - 使用命名参数实现委托(delegate)