使用Swift

时间:2018-03-18 21:07:30

标签: swift firebase object google-cloud-firestore

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

it looks like this

因此,有语言对象,它具有字段记录(Int)和字段daily(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 {

                }

            }
        }
    }

计划每天保存你产生的积分,这就是为什么我有这个对象。因此,问题是为对象添加一个新值&#34;每日&#34;。你会怎么做?或者你想到另一种方式吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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