我尝试在'BOUGHT_PRODUCT'子级内部的字段'status'上使用firebase的.indexOn。
但是,当我运行以下查询时。
db.ref().child('BOUGHT_PRODUCT')
.orderByChild('status')
.equalTo('Service')
.on("value", function (snapshot) {
console.log(snapshot.val());
});
我得到了空快照。 甚至,索引的Firebase警告: “ @ firebase / database:FIREBASE警告:使用未指定的索引。您的数据将在客户端上下载并过滤。考虑将/ BOUGHT_PRODUCT上的“ .indexOn”:“ status”添加到安全规则中,以提高性能。”
Firebase数据:
索引基数:
您的帮助将不胜感激。
答案 0 :(得分:1)
Firebase数据库查询在运行它们的位置下针对每个子代运行。您订购/过滤的字段必须位于每个孩子下方的固定路径上。由于您在/BOUGHT_PRODUCT
上运行查询,因此数据库搜索/BOUGHT_PRODUCT/$uid/status
。而且由于该属性不存在,因此没有匹配查询的结果。
换句话说:您当前的数据结构使您可以查询特定用户的产品状态,但不能查询所有用户。如果要实现该用例,则需要创建一个允许使用的数据模型,例如单个产品状态的顶级列表。
Statuses
product1: "Service"
product2: "Service"
product3: "Something else"
另请参阅: