我有以下数据:
我想按顺序返回对象B,C和A.这是可能的firebase查询,或者我收到它们之后是否必须在我的终端进行排序?
以下是我尝试过的代码:
databaseRef.child("order").queryOrderedByValue().observe(.value, with: { snapshot in
let enumerator = snapshot.children
while let child = enumerator.nextObject() as? DataSnapshot {
print("queryOrderedByValue: \(child.key)")
// Get the actual object
databaseRef.child("referenced/\(child.key)").observe(.value, with: {
snap in
print("Received: \(snap.key)")
})
})
}
})
但它收到请求的对象乱序,所以我最终得到:
queryOrderedByValue: objA
queryOrderedByValue: objC
queryOrderedByValue: objB
Received: objA
Received: objB
Received: objC
请注意,objB和objC不符合我们要求的顺序。
也许我做错了,我不应该将firebase视为关系数据库,但我不确定如何构建我的数据。
答案 0 :(得分:0)
使用NoSQL数据库进行数据建模的一般规则是以适合您的查询的方式构建数据。由于实时数据库没有服务器端反向排序,您仍然可以对数据建模以满足您的要求。例如,您可以存储-1,-2,-3(而不是现在正在执行的操作),而不是存储1,2,3,这将按您希望的方式排序。在NoSQL数据库中复制这样的数据并不罕见。
或者您可以切换到Firestore,它允许指定集合中某种文档的方向。