【问题标题】:AngularFire2: query if child existsAngularFire2:查询孩子是否存在
【发布时间】:2017-03-14 12:42:24
【问题描述】:

我正计划从我的数据库中获取一个列表,其中某些记录包含一个可以设置的属性。我想查询和显示没有这个属性的项目

{
  books: {
    book_3: {
     title: "Return of The King"
    },
    book_2: {
     title: "The Two Towers"
    },
    book_1: {
     title: "The Fellowship of the Ring"
     read: 1256953732
    }
  }
}

我已经阅读了第一本书,我想展示剩下的两本书。 在 Firebase 我这样做:

fbl.child('books').orderByChild('read').equalTo(null).on("value", function(data) { 
 // handle data
}

在 AngularFire2 中我会做类似的事情:

this.af.database.list('books', { query: {
  orderByChild: 'read',
  equalTo: null
}});

第一种方法有效,我得到 book_2,book_3,但 AngularFire2 方法返回整个列表!是否有可以指示为空值的值?我尝试过布尔值、空字符串等,但似​​乎没有任何效果。

也许这是一个错误。

【问题讨论】:

  • 我遇到了同样的问题
  • 可以说这是一个错误,因为this 是应用于equalTo 选项的测试。如果null 是一个对SDK 有用的合理值,那么它实际上应该只忽略undefined。我会提出一个issue
  • @cartant 提出的问题:704

标签: angular firebase angularfire2


【解决方案1】:

您可以使用 0 填充每个节点的“读取”子节点(因为您正在存储时间戳及其整数值)并查询如下内容:

   af.database.list('books', { query: {
orderByChild: 'read', 
    equalTo: 0
    }

【讨论】:

    【解决方案2】:

    该问题已通过 this pull request 修复 - 包含在 AngularFire2 的 2.0.0-beta.7 版本中。

    该问题已通过this pull request 修复 - 应该包含在 2.0.0-beta.7 之后的 AngularFire2 已发布版本中。

    修复后,如果您创建这样的查询:

    this.af.database.list('books', { query: {
      orderByChild: 'read',
      equalTo: null
    }});
    

    它们的行为与您期望的一样,并且仅返回不具有 read 属性的列表项。

    【讨论】:

    • 最近是否有任何改变打破了这一点。我再次获得完整列表,而不是 null elemination。
    • “null 消除”是错误的术语,但您会遇到问题。
    猜你喜欢
    • 2017-04-27
    • 2018-07-20
    • 2017-10-24
    • 1970-01-01
    • 2016-09-18
    • 2011-11-25
    • 2016-09-20
    • 2010-12-06
    • 2013-05-09
    相关资源
    最近更新 更多