可以在Firebase上查询!equalTo:null吗?

时间:2017-07-03 18:06:20

标签: javascript angular firebase firebase-realtime-database angularfire2

我正在使用此查询来验证我的Firebase上是否存在数据(使用AngularFire2)

let aux = this.afData.list("/drivers", { query: { orderByChild: '/accountHistory/approved', equalTo: null } });

工作得很好,但我还需要进行反向查询。

喜欢这个

let aux = this.afData.list("/drivers", { query: { orderByChild: '/accountHistory/approved', equalTo: !null } });

问题是。第二个查询仅在值 TRUE 时返回,我在/ driveruid / accountHistory / approved'上存储TIMESTAMP

有什么方法可以只验证Value是否存在?

谢谢!

1 个答案:

答案 0 :(得分:7)

在Firebase文档中,orderByChild的查询按以下顺序返回列表: -

  

指定子键值为null的子项首先出现。

     

接下来是指定子键值为false的子节点。如果多个子项的值为false,则按键按字典顺序排序。

     

接下来是指定子键值为true的子节点。如果多个子项的值为true,则按键按字典顺序排序。

     

接下来是具有数值的儿童,按升序排序。如果多个子节点具有指定子节点的相同数值,则按键对它们进行排序。

     

字符串在数字之后出现,并按字典顺序按升序排序。如果多个子节点具有指定子节点的相同值,则按键按字典顺序排序。

     

对象排在最后,按字典顺序按键按升序排序。

虽然您的第一个查询工作正常,但对于第二个查询,您可以尝试以下代码。

let aux = this.afData.list("/drivers", { query: { orderByChild: '/accountHistory/approved', startAt: false });

通过这样做,您的查询结果将不包含您的子节点值为null的数据。

尽管如此,我建议您确保子节点上的数据与所有节点的类型相同,以最大限度地减少类别转换异常和其他错误的可能性。这更像是一场黑客行为。