如何过滤和检索 Firebase 实时数据库中的嵌套子项?

这是我正在使用的数据库结构的简化版本:


  "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。


这是我第一次发布问题,如果有任何我可以更清楚地说明问题,请发表评论,非常感谢任何帮助!


慕森王
浏览 159回答 1
1回答

慕标琳琳

其中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    })})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript