使用firebaseArray,是否可以按指定的子键进行排序:(https://www.firebase.com/docs/web/guide/retrieving-data.html#section-queries)?
var fireRef = new Firebase(https://dinosaur-facts.firebaseio.com/dinosaurs);
var query = fireRef.orderByChild("echo").limitToFirst(25);
var todos = $firebaseArray(query);
Run Code Online (Sandbox Code Playgroud)
但是,默认情况下,Firebase会按升序检索密钥.
接下来是具有数值的孩子,按升序排序.
有没有办法直接从firebaseArray 以降序获得结果?例如,他们有什么喜欢.reverse()或.orderBy(desc, ...)?
我正在尝试从Firebase订购我的数据,因此最新的帖子位于顶部(如Instagram),但我无法让它正常工作.我应该使用服务器时间戳吗?是否有"createdAt"字段?
func getPosts() {
POST_REF.observeEventType(.Value, withBlock: { snapshot in
guard let posts = snapshot.value as? [String : [String : String]] else {
print("No Posts Found")
return
}
Post.feed?.removeAll()
for (postID, post) in posts {
let newPost = Post.initWithPostID(postID, postDict: post)!
Post.feed?.append(newPost)
}
Post.feed? = (Post.feed?.reverse())!
self.tableView.reloadData()
}, withCancelBlock: { error in
print(error.localizedDescription)
})
}
Run Code Online (Sandbox Code Playgroud) 对于我正在处理的iOS应用程序,我需要按降序获取消息,即最新消息首先出现,然后是第二个最新消息等.
通过查看其他SO答案和研究,似乎我的情况的最佳方法是创建一个负时间戳,然后将其作为消息的额外属性保存到数据库.
然后我将queryOrderedByChild('negativeTimestamp')用于获取a中的消息,然后使用observeSingleEventchildAdded观察器来处理在进行初始调用后发送的消息.
在firebase 文档中,它说我可以从这段代码firebase.database.ServerValue.TIMESTAMP中获取服务器时间戳值.
我如何为Swift 3写这个?
更新: ****小编辑,我发现实际上唯一冻结的是从 firebase 检索数据,尤其是需要检索的图像。func initOberserver 用于从 firebase 检索数据。所以这需要每次在后台完成。但是 tableview 必须同时可用? ****
我在后台线程上有点挣扎。我正在制作一个 firebase 应用程序,但是当我将某些内容上传到 firebase 并将其检索回应用程序时,我的应用程序冻结了一段时间。
我在一个单独的打开文件中有 2 个常量:
let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
Run Code Online (Sandbox Code Playgroud)
我有一个视图控制器:ListVC,它使用此功能从 firebase 检索数据。
func initObservers() {
//LoadingOverlay.shared.showOverlay(self.view)
dispatch_async(backgroundQueue, {
DataService.ds.REF_LISTS.observeEventType(.Value, withBlock: { snapshot in
print(snapshot.value)
self.lists = []
if let snapshots = snapshot.children.allObjects as? [FDataSnapshot] {
for snap in snapshots {
print("SNAP: \(snap)")
if let listDict = snap.value as? Dictionary<String, AnyObject> {
let key = snap.key
let list = List(listKey: key, dictionary: …Run Code Online (Sandbox Code Playgroud) 我的数据库结构是这样的:
{
"users": {
"alovelace": {
"name": "Ada Lovelace",
"score": 4,
},
"ghopper": { ... },
"eclarke": { ... }
}
}
Run Code Online (Sandbox Code Playgroud)
我试图按降序检索前20个分数.
let queryRef = FIRDatabase.database().reference().child("users").queryOrderedByChild("score").queryLimitedToLast(20)
queryRef.observeSingleEventOfType(.Value, withBlock: { (querySnapShot) in
print(querySnapShot.value)
})
Run Code Online (Sandbox Code Playgroud)
我想要输出像
score": 4
score": 3
score": 2
or
score": 2
score": 3
score": 4
or
2
3
4
Run Code Online (Sandbox Code Playgroud)
请让我知道如何解决这个问题.
给定一个 Firebase 节点,lines其中填充了唯一 ID 子节点(来自push()操作),如下所示:
Firebase--
--lines
--K3qx02jslkdjNskjwLDK
--K3qx23jakjdz9Nlskjja
--K3qxRdXhUFmEJdifOdaj
--etc...
Run Code Online (Sandbox Code Playgroud)
我希望能够删除除最近添加的 200 个(或 100 个,或其他)lines 之外的所有子级。基本上这是一个清理操作。lines现在我知道我可以通过抓取客户端所有子项的快照,计算条目数,然后使用endsAt(totalChildren-numToKeep)来获取相关数据并运行来做到这一点remove()。但我想避免将所有数据抓取给客户端。
我上面的想法有替代方案吗?