【问题标题】:Is possible query an !equalTo: null on Firebase?是否可以在 Firebase 上查询 !equalTo: null ?
【发布时间】:2017-07-04 07:58:57
【问题描述】:

我正在使用此查询来验证我的 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 时返回,我将 TIMESTAMP 存储在 /driveruid/accountHistory/approved'

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

谢谢!

【问题讨论】:

  • 没有任何值检查。但是你在那里存储什么值?您也许可以使用startAt("a").endAt("z").limitToFirst(1) 到达某个地方(取决于您可以拥有的值的范围)。
  • @FrankvanPuffelen 感谢您的帮助!我的问题只有 2 个案例。 * 数据的缺失 * TIMESTAMP 的存在 Rohan 的建议非常有效!再次感谢!

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


【解决方案1】:

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

指定子键的值为空的子键优先。

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

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

具有数值的子项紧随其后,按升序排列。如果指定子节点的多个子节点数值相同,则按key排序。

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

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

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

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

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

不过,我建议您确保子节点上的数据对于所有节点都是相同的类型,以最大程度地减少 Class cast 异常和其他错误的机会。这更像是一种黑客攻击。

【讨论】:

  • 感谢罗汉·史塔克!效果惊人!
  • 上周是否有重大变化?无论我做什么,limitToFirst 或 limitToLast,我都无法让 orderByChild('child-key') 返回任何没有子键的项目。它曾经是我可以做一个 OrderByChild('child-key').equalTo(null) 并且它只会返回缺少那个孩子的值。现在我什么也得不到。我没有更改任何代码。而且我还没有更新任何我知道的软件包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多