【问题标题】:How can I limitToLast THEN orderByChild?我怎样才能 limitToLast THEN orderByChild?
【发布时间】:2018-04-09 06:11:47
【问题描述】:

我需要做的基本上是获得最后 50 名中的前 10 名。或者实际上是 limitToLast(50) THEN orderByChild。

现在这段代码可以很好地获取我的 ENTIRE LIST(thousands) 的前 50 个并反转它以获得正确的显示顺序,但它正在对整个列表进行排序并返回前 50 个。我需要对最后一个中的前 10 个进行排序50 个条目。

export class DisplayComponent{
  trackFbObjects = (idx, obj) => obj.$key;

  fml: Observable<any>

  constructor(db: AngularFireDatabase) {    
    this.fml = db.list('vertigo', ref => ref.limitToLast(50).orderByChild("totalvote")).valueChanges()
    .map((Array) => Array.reverse());
  }

}

然后我将使用 NgFor 和 NgIf 从 50 个中提取 10 个,如下所示:

<ul *ngFor="let item of (fml | async); let i = index; trackBy:trackFbObjects">
<li *ngIf="i<10"> {{ item.title }}  </li></ul>

我在想也许可以只做 limitToLast(50) 然后在 Array.reverse() 期间可能通过“totalvote”对其进行排序?我不知道,但我找不到可行的解决方案,我们将不胜感激。

如果有帮助,我的条目如下所示:

     vertigo
       -L9X0AiwPemOIepVm5gf
         -totalvote: "333"
         -title: "Smile."

【问题讨论】:

    标签: firebase firebase-realtime-database angularfire2


    【解决方案1】:

    如果将来有人需要这个,我可以像这样在我的查询之外对我的列表进行排序:

      constructor(db: AngularFireDatabase) {    
        this.fml = db.list('vertigo', ref => ref.limitToLast(50)).valueChanges()
        .map((Array) => Array.sort((a, b) => b['totalvote'] - a['totalvote']));
      }
    

    【讨论】:

      猜你喜欢
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      • 2013-09-05
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多