这是我正在使用的数据库结构的简化版本: "user" : { "nhbAQ9p8BrMoAIbJNKvLlXTdiNz2" : { "log" : { "-LhMVugmjmIdqwrJSURp" : { "a" : 25120, "timeStamp" : 1560312000000, }, "-Lh_Z9GsJJvlMOpVV9jU" : { "a" : 19033, "timeStamp" : 1564718400000, } } } }我在使用给定的用户 ID(例如 nhbAQ9p8BrMoAIbJNKvLlXTdiNz2)和时间戳(例如1560312000000)过滤和检索“a”的值时遇到问题。我已经尝试了orderByChild(),equalTo()和 添加once()侦听器的组合来完成任务,但null到目前为止它们才返回。我拥有的代码:firebase.database().ref('user/' + userID + + '/log').orderByChild('timeStamp').equalTo(targetTimeStamp).once('value').then(function(snapshot){ let userLog = snapshot.val().a})其中userID是一个字符串,targetTimeStamp是一个数字。我检查了DOC和岗位约orderByChild(),但我仍然不知道是什么原因导致它返回null。这是我第一次发布问题,如果有任何我可以更清楚地说明问题,请发表评论,非常感谢任何帮助!
1 回答
慕标琳琳
TA贡献1830条经验 获得超9个赞
其中userID和targetTimeStamp都是字符串。
这就是什么都没有返回的原因。在数据库中,timeStamp属性的值是一个数字,将数字与字符串进行比较永远不会返回匹配项。
要使查询工作,请将字符串转换为数字:
...equalTo(parseInt(targetTimeStamp)).once(...
除此之外,针对 Firebase 数据库的查询可能有多个结果。因此快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。
所以你也需要处理这种情况:
firebase.database().ref('user/' + userID + + '/log').orderByChild('timeStamp').equalTo(targetTimeStamp).once('value').then(function(results){
results.forEach(function(snapshot) {
let userLog = snapshot.val().a
})
})
添加回答
举报
0/150
提交
取消