Firebase:如何为嵌套字段添加索引?

Firebase:如何为嵌套字段添加索引?,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我有一个locations orders表,如下所示: { "0BW3H9T3R7HJB" : { "orders" : { "01750ea0-4980-4bc4-58b2-988c02324e671478636582396" : { "created_at" : 1478636560000, }, "01750ea0-4980-4bc4-58b2-988c02324e671478636582483" : { "c

我有一个
locations orders
表,如下所示:

{
  "0BW3H9T3R7HJB" : {
    "orders" : {
      "01750ea0-4980-4bc4-58b2-988c02324e671478636582396" : {
        "created_at" : 1478636560000,
      },
      "01750ea0-4980-4bc4-58b2-988c02324e671478636582483" : {
        "created_at" : 1478636560000,
      }
    }
}
每个location orders节点都有一个带有多个键/对象的
orders
节点。这些对象上有一个在处创建的
字段

我将此添加到我的数据库规则中:

{
  "rules": {
    ".read": true,
    ".write": true,
    "users": {
      ".indexOn": "merchantId"
    },
    "merchants": {
      ".indexOn": "locations"
    },
    "locations-orders": {
      ".indexOn": ["orders/created_at"]
    }
  }
}
但是,Firebase仍在抱怨我缺少一个索引:

Using an unspecified index. Consider adding ".indexOn": "created_at" at /locations-orders/1JS53G0TT5ZQD/orders to your security rules for better performance
我应该运行一些东西来创建索引吗?还是写错了

==更新===

我更改了文件以查看:

{
  "rules": {
    ".read": true,
    ".write": true,
    "users": {
      ".indexOn": "merchantId"
    },
    "merchants": {
      ".indexOn": "locations"
    },
    "locations-orders": {
      "$location_id": {
        ".indexOn": ["orders/created_at", "orders/status_updated_at"]
      }
    }
  }
}
但我还是得到了同样的警告:

Using an unspecified index. Consider adding ".indexOn": "created_at" at /locations-orders/1JS53G0TT5ZQD/orders to your security rules for better performance
试试这个:

{
  "rules": {
    ".read": true,
    ".write": true,
    "users": {
      ".indexOn": "merchantId"
    },
    "merchants": {
      ".indexOn": "locations"
    },
    "locations-orders": {
      "orders": {
        "$orderid": {
          ".indexOn": "created_at"
        }
      }
    }
  }
}

如果查看数据结构,则在
/location order/$orderId
下的
处没有创建的
订单

{
  "rules": {
    ".read": true,
    ".write": true,
    "users": {
      ".indexOn": "merchantId"
    },
    "merchants": {
      ".indexOn": "locations"
    },
    "locations-orders": {
      "$someid": {
        ".indexOn": ["orders/created_at"]
      }
    }
  }
}

问题中包含了JSON树和规则的图片。请将它们替换为实际的JSON和文本形式的规则,您可以通过单击Firebase数据库控制台中的导出按钮轻松获得这些内容。将JSON作为文本使其具有可搜索性,允许我们轻松使用它来测试您的实际数据,并在我们的答案中使用它,这通常是一件好事。当然可以@弗兰克万帕夫伦更新!我为
$someid
写什么重要吗?不重要。这就像实际代码中的变量名:只要在规则中使用相同的值(此处不需要),实际名称就无关紧要。我不必运行任何命令或任何东西?我更新了它,使其看起来像这样,但它仍然显示当您保存定义错误索引的规则时,会立即创建错误索引。如果您仍然有问题:您能在最小的jsbin中重现它们吗?这将更容易得到一个完整的图片。