我正在使用 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 {
}
}
}
}
该计划每天都会保存您生成的积分,这就是我拥有这个对象的原因。因此,问题是“每天”向对象添加新值。你将如何做?或者你想出另一种方法吗?
最佳答案
在大多数 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/