【问题标题】:Query Firebase with AngularFire2 query getting only one object使用 AngularFire2 查询 Firebase 只获取一个对象
【发布时间】:2017-03-26 09:47:40
【问题描述】:

我有一个 Observable 对象

private Room = AngularFire.database.object(`/Rooms/`);

这个 observable 里面有很多值,但是我有一个孩子叫Empty。为空时为 true 设置,非空时为 false

我只想查询并从 observable 中取回一个房间。我该怎么做呢?这是我第一次尝试不使用 forEach 进行查询,这不是我想要使用的。

this.Room.subscribe(list => {
      list.forEach(snapshot =>{
        if(snapshot.Empty == "true")
          console.log(snapshot);
      })

【问题讨论】:

    标签: angular firebase firebase-realtime-database angularfire


    【解决方案1】:

    在 AngularFire2 中,要使用子值进行查询,您需要使用 list

    AngularFire.database.list(`/Rooms/`, {
        query: {
            orderByChild: 'Empty',
            equalTo: true
        }
    });
    

    生成的 observable 将在 Rooms 下发出一组条目,其中 Empty 设置为 true

    要检索单个孩子,您可以指定limitToFirst

    AngularFire.database.list(`/Rooms/`, {
        query: {
            orderByChild: 'Empty',
            equalTo: true,
            limitToFirst: 1
        }
    });
    

    生成的 observable 将发出一个包含单个条目的数组(如果没有匹配项,则为空数组)。如果发出的条目发生变化并且Empty 设置为false,则可观察对象将重新发出下一个匹配的条目(如果有的话)。如果你只对第一个匹配的条目感兴趣,你可以使用 RxJS first 操作符:

    import 'rxjs/add/operator/first';
    ...
    AngularFire.database.list(`/Rooms/`, {
        query: {
            orderByChild: 'Empty',
            equalTo: true,
            limitToFirst: 1
        }
    })
    .first();
    

    【讨论】:

    • 这项工作非常感谢您,但您是否知道如何取回静态列表或在找到静态列表后取消订阅。因为在我将其设置为 false 后,它会移动到下一个 true
    • 非常感谢
    • 在“空”之后缺少“,”
    • @cartant 我正在使用 firebase 实时数据库进行聊天功能。我的要求是,我想调用一次 list 方法(这将从 fb 获取所有可用数据)并获取要呈现的消息历史记录,之后我需要获取当前节点中添加的最新对象并显示或添加该新对象到当前列表。我怎么做?我在 once() 和 on() 方法的帮助下实现了同样的目标,但使用了聊天库github.com/rpaschoal/ng-chat,因此无法管理实时数据库
    猜你喜欢
    • 1970-01-01
    • 2016-12-10
    • 2016-11-10
    • 2017-07-21
    • 2017-02-03
    • 2016-09-05
    • 2018-06-14
    • 1970-01-01
    • 2015-08-14
    相关资源
    最近更新 更多