android - 在 Firebase 实时数据库中排序数据
问题描述
我有这样的表:
"users":{
"$userUID":{
"dm":{
"$roomID":{
"date":1617755185,
"lastmessage":"Hi"
}
}
}
}
我想查询房间($roomID)按日期排序所以代码是:
val reference:DatabaseReference = FirebaseDatabase.getInstance().getReference("users").child(FirebaseAuth.getInstance().uid!!).child("dm")
var query:Query = reference.orderByChild("date").startAt($previousRoomId).limitToLast(2)
但是没有数据和消息:
Using an unspecified index. Your data will be downloaded and filtered on the client. Consider adding '".indexOn": "date"' at users/fDX9PVJpQxXCVoQzOUS7USarVcv2/dm
我试图添加"users":{".indexOn":"date }
我的 Firebase 规则,但它没有帮助。我该怎么办?
解决方案
您需要在查询运行的路径上定义该索引。
通过添加"users":{".indexOn":"date" }
,您定义了一个索引,允许您在其上运行查询/users
,然后包含date
每个直接子节点的值。这在某些情况下可能有用,但它不是您共享的代码所需的索引。
由于该代码查询/users/$uid/dm
您需要在该路径定义索引:
{
"rules": {
"users": {
"$uid": {
"dm": {
".indexOn": "date"
}
}
}
}
}
上面的$uid
通配符变量表示其下的规则适用于 的每个子节点users
,所以每个用户的dm
节点都有自己的索引。
推荐阅读
- angular - 在本机脚本中找不到名称 com
- php - 如何根据组合框中的选择将值插入到添加到不同列的数据库表中
- c# - 如何在 Outlook 任务窗格 VSTO 中显示标签
- android - 适用于 android 的 Google ML kit Barcode Scanner 示例应用程序无法检测到条形码
- android - 显示消息后如何取消EditText的文本更改?
- javascript - Ionic 2 可重用的页面组件
- html - 如何使用 XSLT 1.0 将 XML 层次结构转换为表?
- javascript - 如何在单选按钮单击功能上添加特定 ID?
- python - 在 RASA NLU 中用不同的训练数据训练相同的模型
- javascript - 将图像注释存储在数据库中而不刷新页面