-1

我想按 shopId 订购,但它返回:

"error" : "索引未定义,添加 ".indexOn": "shopId",用于路径 "/Products",到规则中"。

将不胜感激任何帮助谢谢!

数据

规则:

{
  "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()
4

1 回答 1

0

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

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

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

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

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

另请参阅Firebase 查询双嵌套


如果要查询具有特定 的记录,则shopId需要在数据库中准确列出这些节点的平面列表。

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

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

于 2020-12-13T15:57:04.890 回答