firebase - .indexOn 如何与用户和唯一键一起使用?
问题描述
我对 firebase 中的索引规则感到困惑。我有这个数据库,我想提取distance_traveled
. battery_and_cables
问题是,1
类似于用户自己设置的用户 ID,因此会有所不同。
我在 pyrebase 中使用了这段代码来提取distance_traveled
db.child("mileage_maintenance").order_by_child("distance_traveled").get()
但我明白了
未定义索引,将路径“/mileage_maintenance”的“.indexOn”:“distance_traveled”添加到规则中
这是我的数据库:
我的任何规则:
{
"rules": {
".read": true,
".write": true,
"mileage_maintenance": {
"battery_and_cables":{
".indexOn": ["distance_traveled"]
}
},
}
}
有没有什么方法可以通过1
和push
获得 的钥匙distance_traveled
?
解决方案
Firebase 实时数据库查询在您运行查询的位置下的节点的平面列表上工作。因此,在您的情况下,查询会考虑节点的直接子mileage_maintenance
节点(这只是1
屏幕截图中的节点)。
您可以在规则中使用通配符,例如您的情况:
{
"rules": {
".read": true,
".write": true,
"mileage_maintenance": {
"$id": {
"battery_and_cables":{
".indexOn": ["distance_traveled"]
}
}
}
}
}
如您所见,我$id
在这里为1
节点添加了一个级别。现在这意味着您在每个/mileage_maintenance/$id/battery_and_cables
节点上为distance_traveled
每个子节点的属性定义了一个索引。
因此,使用此索引,您可以查询值的特定/mileage_maintenance/$id/battery_and_cables
路径distance_traveled
。但是您不能仅/mileage_maintenance
针对其下的所有distance_traveled
值运行查询。
如果您需要这样的查询,您将需要修改/增强您的数据模型以允许它。例如,通过引入一个平面的distance_traveled
节点列表,您可以查询:
"distance_traveled": {
"1000000": "1/battery_and_cables/-M01CT...1hMj"
}
或者
"distance_traveled": {
"1~battery_and_cables~-M01CT...1hMj": 1000000
}
最后一个模型中~
的 只是该键中的段的单独部分,因为/
不允许。
另见:
推荐阅读
- python - Python - 尝试通过将多个变量存储在数组中并迭代“更新”它们来一次修改多个变量
- amazon-web-services - EC2 Instance Connect 等效于 scp
- c# - 导出 excel 文本格式 - oledbcommand
- android - Ionic Cordova Run Android 运行成功但手机上没有安装apk
- firebase - 次要应用:在具有多个应用的 Firebase 项目中使用电话身份验证
- node.js - 我应该如何将超级管理员添加到节点 typescript expressjs 应用程序
- javascript - 如何在 StrapiJS 中获取由字段创建和更新的字段?
- typescript - 如何在 Typescript Gatsby 中使用 ```gatsby-plugin-dark-mode```
- coldfusion - ParseDateTime 不会为 SQL Server 日期时间查询输出 ODBC 文字
- c - LinkedList Traversal 随机崩溃