Firebase数据库没有结果

时间:2017-07-09 18:07:14

标签: javascript firebase firebase-realtime-database firebase-admin

我正在使用Firebase功能来获取我的Alexa技能。这是按预期工作的,但我在数据库中的数据是特殊的,有时查询不能返回任何值。

我的密钥是从0101到1231(MMDD),如果我在最高密钥后查询,我没有得到任何回调,因为firebase没有任何数据。

如何设置查询,在这种情况下,我发现第一个> =“0101”?

目前的电话是

admin.database().ref("calendar/birthday")
.orderByKey().startAt(key).limitToFirst(1).once("child_added")
.then(function(snapshot) { ... })

我的数据库结构

"calendar" : {
  "birthday" : {
      "0111" : {
        ... -> 1st person
      },
      ...
      "0710" : {
        ... -> xth person
      },
      ...
      "1109" : {
        ... -> last person
      }
  }
}

我的Alexa技能应该命名下一个生日,它只能工作到11月9日和1月1日之后,因为我不知道如何查询数据。或者我可以以更好的方式构建我的数据以找到下一个生日吗?

1 个答案:

答案 0 :(得分:3)

我认为您正在寻找:我怎么知道没有与我的查询匹配的生日?

在这种情况下,您需要收听value事件。如果您将其附加到once(),则无论是否有结果,当您附加查询时它都会立即触发。

admin.database().ref("calendar/birthday")
  .orderByKey().startAt(key).limitToFirst(1).once("value")
  .then(function(snapshot) {
    if (!snapshot.exists()) {
      console.log("There are no birthdays on or after "+key);
    }
    else {
      snapshot.forEach(function(daySnapshot) {
        console.log("There is a birthday on "+daySnapshot.key);
      });
    }
  })

exists()检测到没有与查询匹配的结果。 forEach()中的else循环是将value与查询结合使用的结果。对Firebase数据库执行查询时,可能会有多个结果。因此快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。