Firebase具有equalTo()的orderByChild在javascript中不起作用

时间:2018-08-23 20:31:38

标签: javascript firebase firebase-realtime-database

我尝试在'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数据: Firebase Data

索引基数: Index firebase

您的帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

Firebase数据库查询在运行它们的位置下针对每个子代运行。您订购/过滤的字段必须位于每个孩子下方的固定路径上。由于您在/BOUGHT_PRODUCT上运行查询,因此数据库搜索/BOUGHT_PRODUCT/$uid/status。而且由于该属性不存在,因此没有匹配查询的结果。

换句话说:您当前的数据结构使您可以查询特定用户的产品状态,但不能查询所有用户。如果要实现该用例,则需要创建一个允许使用的数据模型,例如单个产品状态的顶级列表。

Statuses
  product1: "Service"
  product2: "Service"
  product3: "Something else"

另请参阅: