javascript - 没有结果的 Firebase 数据库

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

我正在为我的 Alexa 技能使用 Firebase Functions。这按预期工作,但我在数据库中的数据很特殊,有时查询无法返回任何值。

我的键是从 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 skill 应该是下一个生日的名字,它只能工作到 11 月 9 日和 1 月 1 日之后,因为我不知道如何查询数据。或者我能否以更好的方式构建我的数据以查找下一个生日?

最佳答案

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

在这种情况下,您需要监听 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() 检测到没有匹配查询的结果。 else 中的 forEach() 循环是在查询中使用 value 的结果。当您对 Firebase 数据库执行查询时,可能会有多个结果。所以快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。

关于javascript - 没有结果的 Firebase 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44999491/

相关文章:

javascript - 是否有可能通过 AJAX 被黑客入侵?

ios - 用户未在 Share App Extension 中登录 Firebase

java - 在聊天应用程序中获取上次查看时间

java - 火力地堡数据库 : Getting "No-Argument Constructor" Error Despite Having It

javascript - React props 和 states-值不更新

javascript - 图像而非背景的涟漪效应

javascript - nginx 与 javascript 文件过期(由 PHP 动态生成)

javascript - 如何正确从 firebase 访问 uid 以将记录添加到另一个数据库中?

reactjs - 太多的重新渲染。 React 限制渲染次数以防止无限循环

javascript - 使用 set() 时,Firebase 不会添加完整的对象