我正在childByAutoId()
用来生我的孩子.每个孩子看起来像:
{
user_id: 1
}
Run Code Online (Sandbox Code Playgroud)
我希望得到最近添加的10个,按时间DESC排序.最简单的方法是什么?
Jay*_*Jay 17
答案是您需要使用一些反向逻辑,并将每个节点中的时间戳键:值对存储为负值.我省略了user_id:1以保持答案更清晰.
这是Firebase结构
"test" : {
"-KFUR91fso4dEKnm3RIF" : {
"timestamp" : -1.46081635550362E12
},
"-KFUR9YH5QSCTRWEzZLr" : {
"timestamp" : -1.460816357590991E12
},
"-KFURA4H60DbQ1MbrFC1" : {
"timestamp" : -1.460816359767055E12
},
"-KFURAh15i-sWD47RFka" : {
"timestamp" : -1.460816362311195E12
},
"-KFURBHuE7Z5ZvkY9mlS" : {
"timestamp" : -1.460816364735218E12
}
}
Run Code Online (Sandbox Code Playgroud)
以及这是如何写到Firebase的; 我只是使用IBAction按钮来写出几个节点:
let testRef = self.myRootRef.childByAppendingPath("test")
let keyRef = testRef.childByAutoId()
let nodeRef = keyRef.childByAppendingPath("timestamp")
let t1 = Timestamp
nodeRef.setValue( 0 - t1) //note the negative value
Run Code Online (Sandbox Code Playgroud)
和读取它的代码
let ref = self.myRootRef.childByAppendingPath("test")
ref.queryOrderedByChild("timestamp").queryLimitedToFirst(3).observeEventType(.ChildAdded, withBlock: { snapshot in
print("The key: \(snapshot.key)") //the key
})
Run Code Online (Sandbox Code Playgroud)
我声明了一个小函数来返回当前的时间戳
var Timestamp: NSTimeInterval {
return NSDate().timeIntervalSince1970 * 1000
}
Run Code Online (Sandbox Code Playgroud)
和输出
The key: -KFURBHuE7Z5ZvkY9mlS
The key: -KFURAh15i-sWD47RFka
The key: -KFURA4H60DbQ1MbrFC1
Run Code Online (Sandbox Code Playgroud)
如您所见,它们的顺序相反.
注意事项:
在这方面,您也可以像往常一样读取数据并将其添加到数组中,然后对数组进行降序排序.这会给客户带来更多的努力,如果你拥有10,000个节点可能不是一个好的解决方案.
归档时间: |
|
查看次数: |
9223 次 |
最近记录: |