Firebase 嵌套索引规则

Firebase nested indexing rules

我想通过 shopId 订购,但它 returns:

"error" : "Index not defined, add ".indexOn": "shopId", for path "/Products", to the rules".

如有任何帮助,将不胜感激!

规则:

{
  "rules": {
    ".read": "now < 1609966800000",  // 2021-1-7
    ".write": "now < 1609966800000",  // 2021-1-7
      "Products":{
        "Records":{
          ".indexOn":["shopId"]
        }
      }
  }
}

Pyrebase 代码:

result = db.child("Products").order_by_child("shopId").equal_to(shopId).get()

Firebase 实时数据库只能过滤您 运行 查询的 直接 子节点。您 order/filter 的值必须位于每个 direct 子节点下的固定路径。

在您的数据结构中,您似乎有两个未知键:UIDunique_recordid。这意味着您无法从 Products.

查询 shopId

可以查询单个用户的记录:

db.child("Products").child("UID of a specific").child("Records")
  .orderByChild("shopId").equalTo("value of shopId")

但是您不能对所有 Products 执行相同的查询,因为 shopId 属性 的路径对于 [=15= 的所有子节点都不相同].

另见 Firebase Query Double Nested


如果您想查询具有特定 shopId 的记录,您需要在数据库中有一个 flat 列表,其中包含这些节点。

Records: {
  "recordid1" : {
    uid: "...",
    productId: "...".
    ...
  },
  "recordid1" : {
    uid: "...",
    productId: "...".
    ...
  }
}

然后您可以在此数据上查询 productId 并查找其他数据,包括现在为每条记录复制的 UID。