2017-01-22 27 views
1

我希望獲得具有最高數量的UpVotes的最熱門帖子。當多個OrderByChild具有相同的值時,如何在Firebase中進行下一個和上一個操作

this.nextPostObservableList= this.af.database.list('/listOfPost',{ 
    query :{ 
    orderByChild : 'postUpvote', 
    limitToLast : 2, 
    endAt : this.currentPost.postUpvote 
    } 
}); 

在這種情況下,如果我orderByChild與postUpvote,我能夠導航此起彼伏。但是,如果多個帖子具有相同的upVote計數,那麼我無法導航(根據上述代碼片段,大於2)。在以下場景中超越post2。請提出解決方案。

{ 
    "post1" : { 
    "postUpvote" : 10, 
    "postname" : "sample 1" 
    }, 
    "post2" : { 
    "postUpvote" : 10, 
    "postname" : "Sample 2" 
    }, 
    "post3" : { 
    "postUpvote" : 20, 
    "postname" : "sample3" 
    }, 
    "post4" : { 
    "postUpvote" : 10, 
    "postname" : "sample4" 
    } 
} 
+0

嗯.. 。Firebase SDK有一個'endAt',用於此目的需要一個額外的參數(項目的關鍵點)。我不確定這是否包含在AngularFire2中。 –

+0

嗨弗蘭克根據文檔關鍵參數endAt是唯一有效如果OrderBy是使用優先級完成。 :(。[鏈接](https://firebase.google.com/docs/reference/js/firebase.database.Query) –

+0

我很確定我已經測試了使用orderByChild()的關鍵參數。你能試試吧? –

回答

3

支持可以傳遞到startAt可選key參數爲added in AngularFire2 2.0.0-beta.7。那時,endAtequalTo的Firebase SDK文檔指出,這些方法的可選key參數只能在按優先級排序時使用。

此文檔已更新,並聲明在訂購兒童,價值或優先級時支持該文檔。

一個PR使用endAtequalTo已經被合併時,所以下一個版本將支持孩子訂購和使用endAt當指定key增加對key參數AngularFire2支持。

指定選購件key,你會使用對象文本包含valuekey,讓您的查詢中檢索當前職位和其前面的職位將是這樣的:

this.nextPostObservableList = this.af.database.list('/listOfPost', { 
    query :{ 
    orderByChild : 'postUpvote', 
    limitToLast : 2, 
    endAt : { 
     value : this.currentPost.postUpvote, 
     key : this.currentPost.postUpvote.$key 
    } 
    } 
}); 
+0

空字符串值是否支持這種情況?意義元素不管值本身是什麼都有值,並且通過給定的關鍵參數開始/結束(我做的一個測試不成功,返回的數據包含從開始的元素的名單,而不是從給定的關鍵) – Bogac

+0

我不知道我明白你你說的是:空字符串,因爲空字符串是一個有效的值。如果它不適合你,你可以在SO上提出問題或在GitHub上提出問題。無論哪種方式,我都會看到它。這些評論中不太可能有足夠的空間來討論它。 – cartant

+0

獲取endAt和startAt不能將對象作爲參數的異常。 –

相關問題