如何按顺序检索相关数据

时间:2018-03-07 20:04:59

标签: firebase firebase-realtime-database

我有以下数据:

  • 引用
    • objA
    • objB
    • objC
  • 顺序
    • objA:1
    • objB:3
    • objC:2

我想按顺序返回对象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视为关系数据库,但我不确定如何构建我的数据。

1 个答案:

答案 0 :(得分:0)

使用NoSQL数据库进行数据建模的一般规则是以适合您的查询的方式构建数据。由于实时数据库没有服务器端反向排序,您仍然可以对数据建模以满足您的要求。例如,您可以存储-1,-2,-3(而不是现在正在执行的操作),而不是存储1,2,3,这将按您希望的方式排序。在NoSQL数据库中复制这样的数据并不罕见。

或者您可以切换到Firestore,它允许指定集合中某种文档的方向。