Javascript Firebase数据库没有结果
我正在使用Firebase函数来提高我的Alexa技能。这是预期的工作,但我在数据库中的数据是特殊的,有时查询无法返回任何值 我的密钥是从0101到1231(MMDD),如果我在最高的密钥之后查询,我不会得到任何回调,因为firebase没有任何数据 在这种情况下,我如何设置第一个>=“0101”的查询 目前的电话是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(
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
事件,您可以确定是否需要启动第二个查询。但是,如果我想获得实时更新,并且仍然能够知道子项列表是否为空,该怎么办?