由子后代查询的Angularfire2

时间:2017-04-04 18:52:56

标签: angular firebase angularfire2

现在我正在尝试使用这样的查询:

this.topNews = this.af.database.list('news',{
  query: {
    orderByChild: 'label/sport',
    equalTo: 'true'
  }
});

不幸的是,我真的没有得到任何东西......我认为可以通过孩子的孩子来查询..我仍然希望它是!

我的结构:

news
  -new1
    -content...
    -labels
      -sport : true
      -soccer: true
  -new2
  ...

谢谢!

Addotional问题:是否有可能从数据库获取 - 某种方式的每种标签类型(如运动,足球..),或者是否能够收集/然后通过它们进行过滤是一种好的做法?我将动态添加标签到新闻,然后以某种方式能够查询所有这些... (我有使用SQL的经验,我仍然无法完全理解这个noSQL背后的逻辑)

2 个答案:

答案 0 :(得分:2)

经过几次尝试后我意识到,当你写 true 时,它实际上包含了一个真正的bool值,而不是一个'true'字符串,所以现在它正在这样工作:

    this.topNews = this.af.database.list('news',{
  query: {
    orderByChild: 'labels/sport',
    equalTo: true //this changed!
  }
});

答案 1 :(得分:1)

这不是一个完整的答案,只是猜测。尝试改为:

this.topNews = this.af.database.list('news',{
  query: {
    orderByChild: 'labels/sport',
    equalTo: 'true'
  }
});

this.topNews = this.af.database.list('news',{
  query: {
    orderByChild: 'label',
    equalTo: 'sport'
  }
});

关于结构部分,我认为你应该维护一个分隔的集合,以这种方式保存标签,你可以更快地访问它。在noSQL中复制东西没有问题。您应该注意的唯一事项是,当您在标签表中更改此标签时,您必须更新使用它的每个文档,这样您才不会出现不一致。