Firebase - 基于分区偏移逻辑的查询



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

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

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

db: AngularFireDatabase, messages: 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 个结果。

火力基地布局

/messages/conversationId/messageId/{message}

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

我在这里做错了什么?

考虑也使用"endat"。

有关详细说明,请查看本教程。

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

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

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

最新更新