使用 AngularFire2 查询 Firebase 只得到一个 object

Query Firebase with AngularFire2 query getting only one object

我有一个 Object Observable

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

这个 observable 里面有很多值,但我有一个 child 叫做 Empty。空时为 true,空时为 false

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

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

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

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

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

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

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

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

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