【问题标题】:Firebase Database with no resultFirebase 数据库没有结果
【发布时间】:2017-12-13 10:43:32
【问题描述】:

我将 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 技能应该命名为下一个生日,它只能在 09.11 月和 01.1 月之后有效,因为我不知道如何查询数据。或者我可以以更好的方式构建我的数据以查找下一个生日吗?

【问题讨论】:

  • 您可能会被 Firebase SDK 的“数组强制”所吸引。有没有办法可以更改数据并为键添加前缀(例如“day_0101”)。这将防止强制并且(如果这是问题的原因)将解决问题。
  • 当然,我可以更改密钥,但这将如何解决“未找到数据”问题?我的最后一个键是“1109”,如果我用“key = '1110'”调用上述查询,我​​将不会得到任何值(现在)。
  • 您能否编辑您的问题以显示您正在查询的 JSON(作为文本,没有屏幕截图)?您可以通过单击Firebase Database console 中的“导出 JSON”链接来获取此信息。
  • 以简化的方式添加了 Firebase 数据库结构。
  • 啊,我想我现在更好地理解了你的问题。您是在问:我怎么知道没有与我的查询匹配的生日?

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


【解决方案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 数据库执行查询时,可能会有多个结果。所以快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果列表。

【讨论】:

  • 我相信 OP 想要一种通过使用一些环绕/循环类型的查询来始终获得结果的方法。例如。当查询 11 月 11 日之后的下一个生日 (1111) 时,它应该返回 1 月 11 日的生日 (0111) 而不是“没有生日”。如果列表中至少有一个生日,则永远不会出现“没有生日”的结果。
  • 是的,这就是我正在寻找的解决方案。现在我也可以搜索“明年”,如果当前没有结果。我知道我总能指望你的回答。谢谢。
  • 感谢您澄清马库斯!没有办法让搜索自动换行。但实际上,使用value 事件,您可以确定您需要触发第二个查询。
  • 但是如果我想获得实时更新并且仍然能够知道孩子列表是否为空怎么办?
猜你喜欢
  • 2016-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多