使用AngularFire2查询查询Firebase只获取一个对象

Bk *_*zor 2 firebase angularfire firebase-realtime-database angular

我有一个Object Observable

private Room = AngularFire.database.object(`/Rooms/`);
Run Code Online (Sandbox Code Playgroud)

这个可观察的内部有许多价值,但我有一个孩子叫Empty.这是设置为true空时和false不时.

我只想查询并从observable中获取一个房间.我该怎么做呢?这是我第一次尝试没有查询使用forEach哪个不是我想要使用的东西.

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

car*_*ant 8

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

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

将所得的可观察到的将发出下项阵列RoomsEmpty设置为true.

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

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

结果observable将发出一个数组,其中包含一个条目(如果没有匹配则为空数组).如果发出的条目更改并Empty设置为false,则observable将使用下一个匹配条目(如果有)重新发出.如果您只对第一个匹配条目感兴趣,可以使用RxJS first运算符:

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