我有这个Firebase实时数据库:
{
"groupUsers" : {
"group1key" : {
"user1key" : "admin"
},
"group2key" : {
"user1key" : "admin",
"user2key" : "readonly",
"user3key" : "readwrite"
}
}
}
在我的Android应用中,我像这样查询
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("groupUsers");
ref.orderByChild(auth.getCurrentUser().getUid()).startAt("").addValueEventListener() {...}
产生警告:
使用未指定的索引。考虑添加" .indexOn" ...到您的安全和Firebase数据库规则以获得更好的性能
如何正确索引?当数据增长时,我担心我的应用程序将变得非常缓慢地查询未编入索引的数据。
我已经在我的规则文件中尝试索引值:
".indexOn": ".value"
但这只有在数据是标量但它们是键值对("user1key" : "admin"
)时才有效。
我不能在我的规则文件中添加索引,如下所示:
".indexOn": ["user"]
因为这需要一个像这样的常量属性名称:
{ "groupUsers" : {
"group1key" : {
"name" : "user1"
}
}
}
但我有像
这样的名字"user1key" : "admin",
"user2key" : "readonly",
"user3key" : "readwrite"
答案 0 :(得分:1)
无法为此类结构预先创建索引。我在答案here和here中介绍了这种类型的结构,而新的Firestore文档(在这方面的工作方式类似)甚至还有documentation page about it。
建议以一种允许在另一个方向上进行查找的方式存储数据。使用当前结构,您可以有效地查找组中的用户。要允许查找用户的组,请添加以下结构:
{
"usersGroups" : {
"user1key" : {
"group1key" : "admin",
"group2key" : "admin"
},
"user2key" : {
"group2key" : "readonly",
},
"user3key" : {
"group2key" : "readwrite"
}
}
}