【发布时间】:2019-08-31 04:18:27
【问题描述】:
我想列出可以更改顺序的任务,但我不确定如何将其存储在数据库中。
我不想使用数组,因为我以后还要做一些查询。
这是我的数据库的截图:
我正在尝试制作类似于 Trello 的东西,用户可以在其中添加任务并可以根据任务的优先级向上和向下移动任务。我还需要更改数据库中任务的位置以维护记录。我无法理解如何在任何数据库中做到这一点。我是一位经验丰富的开发人员,我曾使用过 mongodb 和 firebase,但这对我来说是独一无二的。
这是创建和获取所有任务的代码。当我尝试在集合中移动某些任务时。我在每个任务中都维护了一个索引。 假设当我将任务从索引 5 的位置移动到索引 2 时,我必须通过 +1 编辑所有即将到来的索引,是否有更好的方法?
代码示例
class taskManager {
static let shared = taskManager()
typealias TasksCompletion = (_ tasks:[Task],_ error:String?)->Void
typealias SucessCompletion = (_ error:String?)->Void
func addTask(task:Task,completion:@escaping SucessCompletion){
Firestore.firestore().collection("tasks").addDocument(data: task.toDic) { (err) in
if err != nil {
print(err?.localizedDescription as Any)
}
completion(nil)
}
}
func getAllTask(completion:@escaping TasksCompletion){
Firestore.firestore().collection("tasks")
.addSnapshotListener { taskSnap, error in
taskSnap?.documentChanges.forEach({ (task) in
let object = task.document.data()
let json = try! JSONSerialization.data(withJSONObject: object, options: .prettyPrinted)
var taskData = try! JSONDecoder().decode(Task.self, from: json)
taskData.id = task.document.documentID
if (task.type == .added) {
Task.shared.append(taskData)
}
if (task.type == .modified) {
let index = Task.shared.firstIndex(where: { $0.id == taskData.id})!
Task.shared[index] = taskData
}
})
if error == nil{
completion(Task.shared,nil)
}else{
completion([],error?.localizedDescription)
}
}
}
}
【问题讨论】:
-
这听起来像XY problem。提供更详细的问题描述以及您尝试过但不起作用的代码
-
这个问题应该有更多的赞成票。太棒了。
-
@charlietfl 添加信息
-
我已经添加了更多细节,请任何人批准我没有 2k 代表这样做
-
正确的解决方案将与数据集的大小有关,用户是否想要不同的数据“视图”(如 iTunes 中的播放列表)以及数据集是否可供多个用户访问.这是 100 个任务还是数百万个任务,是每个用户吗?
标签: swift firebase firebase-realtime-database database-design google-cloud-firestore