Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase数据库没有结果_Javascript_Firebase_Firebase Realtime Database_Firebase Admin - Fatal编程技术网

Javascript Firebase数据库没有结果

Javascript Firebase数据库没有结果,javascript,firebase,firebase-realtime-database,firebase-admin,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(

我正在使用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月1日及之后。一月,因为我不知道如何查询数据。或者我可以用一种更好的方式来组织我的数据以找到下一个生日吗?

我想你在寻找:我如何知道没有与我的查询匹配的生日

在这种情况下,您需要监听
事件。如果使用
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()。对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也将包含一个结果列表。

您可能会被Firebase SDK的“阵列强制”捕获。是否有一种方法可以更改数据并为键添加前缀(例如“day_0101”)。这将防止强制,并且(如果这是问题的原因)将修复问题。当然,我可以更改密钥,但这将如何修复“未找到数据”问题?我的最后一个键是“1109”,如果我用“key='1110'”调用上面的查询,我不会得到任何值(现在)。你能编辑你的问题以显示你正在查询的JSON吗(作为文本,没有屏幕截图)?你可以通过点击你网站中的“导出JSON”链接来实现。以简化的方式添加了Firebase数据库结构。啊,我想我现在更了解你的问题了。你是在问:我怎么知道没有生日匹配我的查询?我相信OP想要一种通过使用某种环绕/循环类型的查询来始终获得结果的方法。例如,当查询11月11日之后的下一个生日(
1111
)时,它应该返回1月11日的生日(
0111
),而不是“没有生日”。如果列表中至少有一个生日,就永远不会有“没有生日”的结果。是的,这就是我一直在寻找的解决方案。现在我也可以搜索“明年”,如果当前没有结果的话。我知道我总能指望你的回答。谢谢。谢谢你澄清马库斯!没有办法使搜索自动换行。但实际上,使用
value
事件,您可以确定是否需要启动第二个查询。但是,如果我想获得实时更新,并且仍然能够知道子项列表是否为空,该怎么办?