android - Android Firebase 查询范围(上、中、下)
问题描述
我刚开始在 Android 中使用 Firebase,我写了这样的查询。
messageSearchQuery = FirebaseDatabase.getInstance().getReference().child("Message")
.child(conversationID).limitToLast(INITIAL_MESSAGE_COUNT)
.orderByChild("timestamp").startAt(participant.joiningDate).endAt(endAt);
我只能给limitToFirst
,,,,limitToLast
。(我认为没有中心)startAt
endAt
我需要提供时间戳(例如上午 10 点),我想在上午 10 点之前查询 10 条消息,在上午 10 点之后查询 10 条消息。(但我不知道它什么时候开始,什么时候结束)。
编辑
我想做的是这样的。
messageSearchQuery = FirebaseDatabase.getInstance().getReference().child("Message").
child(conversationID).
orderByChild("timestamp").equalTo(endAt).limitToFirst(INITIAL_MESSAGE_COUNT).limitToLast(INITIAL_MESSAGE_COUNT);
但如果我这样做,它会像这样崩溃。
java.lang.IllegalArgumentException:无法在查询中调用 limitToLast 先前设置的限制!
我该怎么办?
我在 firebase 中的数据是这样的。
解决方案
startAt
您可以通过组合和来选择一个范围endAt
,这两者都对您订购的孩子进行操作。例如,如果您想在某个日期的上午 10 点到晚上 10 点之间发送消息,您可以:
long timestampOf10am = ...;
long timestampOf10pm = ...;
messageSearchQuery = FirebaseDatabase.getInstance().getReference().child("Message")
.child(conversationID)
.orderByChild("timestamp").startAt(timestampOf10am).endAt(timestampOf10pm)
.limitToLast(INITIAL_MESSAGE_COUNT);
更新:如果您在上午 10 点之前需要 10 个项目,在上午 10 点之后需要 10 个项目,则需要触发两个查询并在客户端合并结果。
long timestampOf10am = ...;
beforeMessageSearchQuery = FirebaseDatabase.getInstance().getReference().child("Message")
.child(conversationID)
.orderByChild("timestamp").startAt(timestampOf10am)
.limitToFirst(INITIAL_MESSAGE_COUNT);
afterMessageSearchQuery = FirebaseDatabase.getInstance().getReference().child("Message")
.child(conversationID)
.orderByChild("timestamp").endAt(timestampOf10am)
.limitToLast(INITIAL_MESSAGE_COUNT);
推荐阅读
- html - 当父级宽度为 100% 时防止列扩展
- c++ - C++ 数组排序
- java - for 循环中缺少 return 语句 - return int 表示商店中所有 Customer 对象的平均年龄
- node.js - 解雇并忘记控制器内的工作人员
- php - 如何使用php将时间存储到变量中?
- algorithm - 找到元素小于 S 的子集
- php - 在个人资料页面上显示 JSON
- angular - 在我的 ts 组件中制作 html 以创建菜单
- amazon-web-services - AWS EKS:服务(LoadBalancer)正在运行但未响应请求
- python - 在 'django-bootstrap-modal-forms' 插件代码中没有通过 .load jQuery 行,在模态中创建视图表单