Javascript 如何在firebase数据库中添加indexOn用户ID

Javascript 如何在firebase数据库中添加indexOn用户ID,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我犯了一个错误 使用未指定的索引。您的数据将在客户端上下载和筛选。考虑向您的安全规则添加“.Noxon”:“WKJYMETHVGZQZZXX3VUTBML2HUGN”AT /产品,以获得更好的性能。 这是我的代码: firebase.database().ref("Products").orderByChild(user.uid + "quan").startAt(0).on('value', function (s) { var cart

我犯了一个错误

使用未指定的索引。您的数据将在客户端上下载和筛选。考虑向您的安全规则添加“.Noxon”:“WKJYMETHVGZQZZXX3VUTBML2HUGN”AT /产品,以获得更好的性能。

这是我的代码:

firebase.database().ref("Products").orderByChild(user.uid + "quan").startAt(0).on('value', function (s) {
        var cartNum = 0;
        s.forEach(function (d) {
          console.log(d.child(user.uid + "quan").val());
          cartNum += d.child(user.uid + "quan").val();
        });
        $("#cartCount").text(cartNum);
      });
我试图查询在我的firebase数据库中有
user.uid+'quan'
的产品

这是我的JSON的结构-->>>

如果有人能帮我,非常感谢


如索引数据文档和错误消息中所述,您需要在控制台中为数据库的Firebase规则添加索引:

{
  "rules": {
    "Products": {
      ".indexOn": "WkJymEhTtvgtIzQZZxs3VUTbmLh2quan"
    }
  }
}
这将解决当前用户的错误消息。问题是您需要为每个UID显式地声明这样的索引,除非您考虑到一组特定的用户,否则这是不可行的

潜在的问题是,您当前的数据结构使查找给定产品的用户变得很容易,但却不便于查找特定用户的产品。为了允许使用后一种用例,您需要为该反向映射添加额外的数据结构,有时称为反向或反向索引:

"Users": {
  "uid1": {
    "productId1": true,
    "productId2": true
  },
  "uid2": {
    "productId3": true,
    "productId4": true
  }
}
虽然这复制了一些数据,但它允许您在两个方向上查找相关数据。这种允许用例的数据复制在NoSQL数据库中非常常见

另见:


好的,我会尝试一下,解决后再联系你,谢谢我为购物车项目创建了另一个索引,并在我的安全规则中添加了一些通配符
$unknown
,用于跳过动态节点,解决了很多问题,谢谢