我正在使用此查询来验证我的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是否存在?
谢谢!
答案 0 :(得分:7)
在Firebase文档中,orderByChild
的查询按以下顺序返回列表: -
指定子键值为null的子项首先出现。
接下来是指定子键值为false的子节点。如果多个子项的值为false,则按键按字典顺序排序。
接下来是指定子键值为true的子节点。如果多个子项的值为true,则按键按字典顺序排序。
接下来是具有数值的儿童,按升序排序。如果多个子节点具有指定子节点的相同数值,则按键对它们进行排序。
字符串在数字之后出现,并按字典顺序按升序排序。如果多个子节点具有指定子节点的相同值,则按键按字典顺序排序。
对象排在最后,按字典顺序按键按升序排序。
虽然您的第一个查询工作正常,但对于第二个查询,您可以尝试以下代码。
let aux = this.afData.list("/drivers", { query: { orderByChild: '/accountHistory/approved', startAt: false });
通过这样做,您的查询结果将不包含您的子节点值为null
的数据。
尽管如此,我建议您确保子节点上的数据与所有节点的类型相同,以最大限度地减少类别转换异常和其他错误的可能性。这更像是一场黑客行为。