Firebase 实时数据库:第 4 级嵌套的 orderByChild().equalTo()
Firebase Realtime Database: orderByChild().equalTo() on 4th level nesting
我正在尝试 运行 一个 firebase 实时数据库查询,以根据嵌套在从根开始的第 4 层的值来过滤数据。下面是数据结构,我的查询是:
let ordersSnapshot = await admin.database().ref(`orders`).orderByChild(`info/infoStatus`)
.equalTo("In Process")
.once('value');
但是这个查询没有返回任何数据。我启用了索引并且没有警告。我也将查询更改为 .orderByChild('infoStatus')
但没有结果。
如果我将 ref 设置为低于一级,即 admin.database().ref('orders/userId1').orderByChild('info/infoStatus').equalTo("In Process")
,那么它会成功获得结果。但是在我的场景中,我没有可以在 orderByChild
.
中使用的用户 ID
这是实时数据库查询的限制,即我需要更新我的数据结构还是我的查询有任何错误?
订单节点:
{
"userId1": {
"orderId1": {
"info": {
"infoStatus": "In Process"
}
},
"orderId2": {
"info": {
"infoStatus": "Complete"
}
}
},
"userId2": {
"orderId1": {
"info": {
"infoStatus": "In Process"
}
}
},
"userId3": {
"orderId1": {
"info": {
"infoStatus": "In Process"
}
}
}
}
你order/filter所在的属性必须在每个child下的固定路径。这意味着在您当前的数据结构中,您无法过滤所有用户的订单,只能过滤特定用户。
典型的解决方案是扁平化数据,将订单存储在一个扁平列表中,如果仍然需要,则向每个用户添加订单 ID 的查找列表。类似于:
users: {
"userId1": {
"orderId1": true,
"orderId2": true
},
"userId2": {
"orderId3": true
}
"userId3": {
"orderId4": true
}
}
orders: {
"orderId1": {
"info": {
"infoStatus": "In Process"
}
},
"orderId2": {
"info": {
"infoStatus": "Complete"
}
},
"orderId3": {
"info": {
"infoStatus": "In Process"
}
},
"orderId4": {
"info": {
"infoStatus": "In Process"
}
}
}
另见:Firebase Query Double Nested
我正在尝试 运行 一个 firebase 实时数据库查询,以根据嵌套在从根开始的第 4 层的值来过滤数据。下面是数据结构,我的查询是:
let ordersSnapshot = await admin.database().ref(`orders`).orderByChild(`info/infoStatus`)
.equalTo("In Process")
.once('value');
但是这个查询没有返回任何数据。我启用了索引并且没有警告。我也将查询更改为 .orderByChild('infoStatus')
但没有结果。
如果我将 ref 设置为低于一级,即 admin.database().ref('orders/userId1').orderByChild('info/infoStatus').equalTo("In Process")
,那么它会成功获得结果。但是在我的场景中,我没有可以在 orderByChild
.
这是实时数据库查询的限制,即我需要更新我的数据结构还是我的查询有任何错误?
订单节点:
{
"userId1": {
"orderId1": {
"info": {
"infoStatus": "In Process"
}
},
"orderId2": {
"info": {
"infoStatus": "Complete"
}
}
},
"userId2": {
"orderId1": {
"info": {
"infoStatus": "In Process"
}
}
},
"userId3": {
"orderId1": {
"info": {
"infoStatus": "In Process"
}
}
}
}
你order/filter所在的属性必须在每个child下的固定路径。这意味着在您当前的数据结构中,您无法过滤所有用户的订单,只能过滤特定用户。
典型的解决方案是扁平化数据,将订单存储在一个扁平列表中,如果仍然需要,则向每个用户添加订单 ID 的查找列表。类似于:
users: {
"userId1": {
"orderId1": true,
"orderId2": true
},
"userId2": {
"orderId3": true
}
"userId3": {
"orderId4": true
}
}
orders: {
"orderId1": {
"info": {
"infoStatus": "In Process"
}
},
"orderId2": {
"info": {
"infoStatus": "Complete"
}
},
"orderId3": {
"info": {
"infoStatus": "In Process"
}
},
"orderId4": {
"info": {
"infoStatus": "In Process"
}
}
}
另见:Firebase Query Double Nested