【问题标题】:AngularFire2: is it possible to retrieve a specific object from Firebase database by value?AngularFire2:是否可以按值从 Firebase 数据库中检索特定对象?
【发布时间】:2018-09-22 18:58:35
【问题描述】:

这是我的数据库: firebase database

我想检索一个“特色”属性为真(dish.feature = true)的菜。

有可能吗?或者我必须检索所有菜肴并在客户端查询它??

【问题讨论】:

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


    【解决方案1】:

    您可以使用 orderByChildequalTo 的组合使用 AngularFire2 querying lists 来实现此目的:

    db.list('/dishes', ref => ref.orderByChild('featured').equalTo(true))
    

    这些示例使用db 作为AngularFireDatabase 的注入实例,您可以将其替换为您在执行查询的组件的控制器中为注入实例命名的任何名称。

    @Component({ ... })
    export class FooComponent {
        constructor(db: AngularFireDatabase) {}
    } 
    

    更新: 您可能会收到一条警告,指出需要将 .indexOn 添加到您的 Firebase 数据库规则中。在最基本的层面上,它看起来像这样:

    {
      "rules": {
        "dishes": {
          ".indexOn": ["featured"]
        }
      }
    }
    

    希望对您有所帮助!

    【讨论】:

    • 谢谢 :D,我只需要在 true ('true') 周围加上 ''。
    • 当您查询特定属性时,我会按照 Firebase 的建议添加索引。我添加了一个将 .indexOn 索引添加到 Firebase 数据库规则的示例。我能问一下为什么您将真/假布尔值作为字符串而不是标准布尔值吗?
    • 在角度我有 Dish 类来强制类型,但我是 firebase 和 NoSQL 的新手。是否可以在 firebase 数据库中使用类型?
    • Firebase 数据库数据必须是有效的JSON Data Types。我建议您将 TypeScript Dish 类特色属性设置为 boolean 而不是字符串,当它被序列化时,它应该保持为布尔值而不是字符串。如果它有助于解决您的问题,请标记答案。谢谢!
    猜你喜欢
    • 2016-12-10
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 2018-06-02
    • 2018-05-11
    • 2019-02-04
    相关资源
    最近更新 更多