【问题标题】:Firebase - Query based on partitioned offset logicFirebase - 基于分区偏移逻辑的查询
【发布时间】:2017-12-18 06:29:49
【问题描述】:

我正在 Angular 4 中创建一个聊天应用程序,它在 Firebase 数据库中存储和读取消息。

我编写了一个查询来仅检索该特定对话的最新 10 条消息。

this.messages = this.db.list('messages/' + conversationId, { query: { limitToLast: 10 } });

db:AngularFireDatabase,消息:FirebaseListObservable

现在我想在某人按下“更多”按钮(或滚动到顶部)时检索 10 条较旧的消息,但我在为此编写查询时遇到了困难。

这是我尝试过的:

this.messages = this.db.list('messages/' + conversationId, { query: { orderbyChild: 'id', startAt: start, limitToLast: 10 } });

这里的'start' 是一个类似'-KovtCl4hEUPR2LfQfpc' 的 id,它是 this.messages FirebaseListObservable 中最旧消息的 id。我还尝试将此 ID 作为字符串手动传递给执行上述查询的方法。

尝试按照此处所述进行操作:

  1. https://stackoverflow.com/a/43969460/5437768
  2. https://firebase.google.com/docs/reference/android/com/google/firebase/database/Query
  3. https://firebase.google.com/docs/database/web/lists-of-data#filtering_data

最后一个查询给了我 0 个结果。

Firebase 布局

/messages/conversationId/messageId/{message}

"messages": {
    "-k32b": {
        "-kT3d": {
            "content": "Hello World!",
            "id" : "-kT3d"
        },
        "-kT4c": {
            "content": "How are you World?",
            "id" : "-kT4c"
        }
    }
}

我在这里做错了什么?

【问题讨论】:

    标签: angular firebase firebase-realtime-database lazy-loading angularfire2


    【解决方案1】:

    考虑使用“endat”。

    查看this tutorial 了解详细说明。

    PS 我正在打电话,我会重新格式化一下。

    【讨论】:

    • 感谢您的评论。虽然它似乎不正确,但 endAt 不是必需的,也不适合我。我没有“+10”消息的 ID,因为这不像“currentId +10”那么简单。
    • 你假设“endat”是如何工作的,很抱歉,你的假设是错误的。 “endat”是一个非常灵活的工具,可以让您选择更具体的数据块。不仅仅是“下一个 10”或“currentId + 10”。我建议您再看看提供的文档和教程,以更好地理解“endat”函数,因为它可能很有用。
    【解决方案2】:

    事实证明,由于查询中的拼写错误(“orderbyChild”而不是“orderByChild”),它不起作用。感谢 Firebase 在这里没有给我任何错误:p

    我现在确实在方法链中同时使用 .orderByChild()、.endAt() 和 .limitToLast()。这确保查询条件以正确的顺序执行,而在查询对象中查询 this 似乎没有特别的顺序执行这些条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      相关资源
      最近更新 更多