当前位置: 首页 > 面试题库 >

Firebase Realtime DB:如何在键值对上正确建立索引

葛鸿轩
2023-03-14
问题内容

我有以下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"

问题答案:

无法为这种结构预先创建索引。我已经在这里和这里的答案中涵盖了这种类型的结构,并且新的Firestore文档(在此方面的工作原理与此相似)甚至都有关于它的文档页面。

建议以一种也可以在另一个方向进行此查找的方式存储数据。使用当前的结构,您可以有效地查找组中的用户。为了也允许为用户查找组,请添加以下结构:

{      
  "usersGroups" : {
    "user1key" : {
      "group1key" : "admin",
      "group2key" : "admin"
    },
    "user2key" : {
      "group2key" : "readonly",
    },
    "user3key" : {
      "group2key" : "readwrite"
    }
  }
}


 类似资料:
  • 如何使用AngularJS正确显示键值对? 这是我的HTML: 以下是JSON数据: 以下是输出: 我想要:

  • 问题内容: 查看实时代码: 角JS 到底如何正确遍历嵌套键值对并正确输出,如下所示? 我要的是一棵像这样的树 当前视图是: JS: HTML: 问题答案: 您非常接近,我更新了小提琴。http://jsfiddle.net/y9wj6/9/

  • 本文向大家介绍如何在SAP中建立表索引?,包括了如何在SAP中建立表索引?的使用技巧和注意事项,需要的朋友参考一下 您需要使用事务SE11。此事务用于在表上创建索引。 在这里要牢记的一件事是将这些索引转移到生产中。您需要使用事务在开发环境中创建索引。创建它们后,您需要将它们传输到生产环境。 进行更改后,激活表格。

  • 问题内容: 这是我正在使用的密集设置的过度简化。并且都具有自动增量代理主键作为ID。是包含有关和的信息的表。 我试图决定,如果我应该做的主键的复合ID的距离和。如果我要这样做,哪一个最有意义? (在此示例中,我将ID 11209与ID 437组合在一起) 11209437 (我可以想象为什么这很糟糕) 11209-437 11209.437 或者是其他东西? 将其用作MYSQL MYISAM DB

  • 问题内容: 我有一个2D整数数组。我希望将它们放入HashMap中。但是我想从基于数组索引的HashMap访问元素。就像是: 对于A [2] [5],它返回与该键关联的值。但是,如何使用一对密钥创建一个hashMap?或者通常是多个键:以一种我可以使用get(key1,key2,… keyN)来访问元素的方式。 编辑:发布问题3年后,我想再添加一点 我遇到了另一种方法。 数组索引,和可被表示为一个

  • 我试图搜索一个JSON对象,并提取下面和的Key/Value对。我想提取和的所有实例: } 我试过好几样都不管用。 这只打印的输出,而不打印值。我想要这个值和钥匙。