Java Firebase实时数据库:如何在键值对上正确索引 问题:
我有一个Firebase实时数据库:Java Firebase实时数据库:如何在键值对上正确索引 问题:,java,android,json,firebase,firebase-realtime-database,Java,Android,Json,Firebase,Firebase Realtime Database,我有一个Firebase实时数据库: { "groupUsers" : { "group1key" : { "user1key" : "admin" }, "group2key" : { "user1key" : "admin", "user2key" : &qu
{
"groupUsers" : {
"group1key" : {
"user1key" : "admin"
},
"group2key" : {
"user1key" : "admin",
"user2key" : "readonly",
"user3key" : "readwrite"
}
}
}
在我的安卓应用程序中,我这样查询
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("groupUsers");
ref.orderByChild(auth.getCurrentUser().getUid()).startAt("").addValueEventListener() {...}
这会产生警告:
使用未指定的索引。考虑添加“.Noxon”…更改您的安全性和Firebase数据库规则以获得更好的性能
如何正确索引?当数据不断增长时,我担心我的应用程序在查询未编入索引的数据时会变得非常慢
背景
我已尝试在规则文件中索引这些值:
".indexOn": ".value"
但是,只有当数据是标量,但它们是键值对时(user1key:“admin”)
我不能像这样在规则文件中添加索引:
".indexOn": ["user"]
{ "groupUsers" : {
"group1key" : {
"name" : "user1"
}
}
}
因为这需要一个常量属性名,如下所示:
".indexOn": ["user"]
{ "groupUsers" : {
"group1key" : {
"name" : "user1"
}
}
}
但我有一些像这样的名字
"user1key" : "admin",
"user2key" : "readonly",
"user3key" : "readwrite"
没有办法为这种结构预先创建索引。在我的回答中,我已经介绍了这种类型的结构,而新的Firestore文档(在这方面的工作方式类似)甚至有一个 建议以允许在另一个方向进行查找的方式存储数据。使用当前结构,您可以高效地查找组中的用户。要同时允许查找用户的组,请添加以下结构:
{
"usersGroups" : {
"user1key" : {
"group1key" : "admin",
"group2key" : "admin"
},
"user2key" : {
"group2key" : "readonly",
},
"user3key" : {
"group2key" : "readwrite"
}
}
}