gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:10:59 25 4
gpt4 key购买 nike

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

  "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和一个post关于 orderByChild() 但我仍然不确定是什么导致它返回 null

这是我第一次发布问题,如果有什么办法可以让我更清楚,请发表评论,非常感谢您的帮助!

最佳答案

where userID and targetTimeStamp are both strings.

这就是没有返回任何内容的原因。在数据库中,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
})
})

关于javascript - 如何在 Firebase 实时数据库中过滤和检索嵌套子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57363619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com