【问题标题】:How to next and previous in firebase when multiple OrderByChild have same Value当多个 OrderByChild 具有相同的值时,如何在 firebase 中进行下一个和上一个
【发布时间】:2017-02-22 14:50:41
【问题描述】:

我想一个接一个地获得UpVotes最多的最受欢迎的帖子。

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

在这种情况下,如果我使用 postUpvote orderByChild,我可以一个接一个地导航。但是,如果多个帖子具有相同的 upVote 计数,那么我将无法导航(根据上面的代码 sn-p,大于 2)。在以下场景中超出 post2。请提出解决方案。

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

【问题讨论】:

  • Hmm... Firebase SDK 有一个 endAt 用于此目的,它需要一个额外的参数(开始的项目的键)。我不确定它是否包含在 AngularFire2 中。
  • 嗨,弗兰克,根据 endAt 中的文档关键参数,仅当 OrderBy 使用 priority 完成时才有效。 :( .link
  • 我很确定我已经使用 orderByChild() 测试了关键参数。可以试试吗?
  • @FrankvanPuffelen - 是的,AngularFire2 不支持startAt 和endAt 的可选参数:github.com/angular/angularfire2/issues/362(相关来源是here)
  • 是的,它似乎还不支持。让我尝试直接使用firebase javascript sdk。

标签: firebase firebase-realtime-database angularfire2


【解决方案1】:

对可以传递给startAt 的可选key 参数的支持是added in AngularFire2 2.0.0-beta.7。当时,endAt 和 equalTo 的 Firebase SDK 文档指出,这些方法的可选 key 参数只能在按优先级排序时使用。

该文档已更新,并声明在订购子级、值或优先级时支持它。

在使用endAt 或equalTo 时添加对AngularFire2 的key 参数的支持的PR 已合并,因此下一个版本将支持在按孩子订购和使用@987654335 时指定key @。

要指定可选的key,您将使用包含value 和key 的对象字面量,因此您检索当前帖子及其前一个帖子的查询将是这样的:

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

【讨论】:

  • 空字符串值是否支持这种情况?含义元素具有价值,而不管价值本身,并且由给定的关键参数开始/结束。 (我做的一个测试不成功,返回的数据包含列表开头的元素,而不是给定键)
  • 我不确定我是否理解你在说什么 re:空字符串,因为空字符串是有效值。如果它不适合您,您可以在 SO 上提问或在 GitHub 上提出问题。不管怎样,我很可能会看到它。这些 cmets 中不太可能有足够的空间来讨论它。
  • 得到 endAt 和 startAt 不能将对象作为参数的异常。
  • 为2.0.0-beta-7 中的startAt 和2.0.0-beta-8 中的endAt 添加了可选密钥。请确保您已安装最新版本 (2.0.0-beta-8)。
猜你喜欢
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 2010-11-30
  • 2023-03-30
  • 1970-01-01
  • 2015-11-04
  • 1970-01-01
  • 2022-12-05
相关资源
最近更新 更多