【问题标题】:Angularfire2 query by child descendant子后代的Angularfire2查询
【发布时间】:2017-04-05 23:43:48
【问题描述】:

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

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

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

我的结构:

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

谢谢!

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

【问题讨论】:

    标签: angular firebase angularfire2


    【解决方案1】:

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

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

    【讨论】:

    • 不错。我相信它也会对我有用。谢谢!
    【解决方案2】:

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

    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 中复制东西没有问题。您唯一需要注意的是,当您在标签表中更改此标签时,您必须更新每个使用它的文档,以免最终出现不一致。

    【讨论】:

    • 不幸的是,我只是在这里拼错了标签*s...不在代码中..所以这不是问题..
    猜你喜欢
    • 2017-01-30
    • 2017-02-03
    • 1970-01-01
    • 2017-03-14
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多