gpt4 book ai didi

javascript - 如何检查 Firebase 中的数据搜索是否成功

转载 作者:行者123 更新时间:2023-12-02 23:13:44 24 4
gpt4 key购买 nike

我正在检查我的数据库中是否存在子值的组合。这可以工作,但无法在控制台中显示正确的消息。两个 else 语句中都会显示正确的控制台消息。未正确显示的是 console.log('yes')。或者实际上它显示了,但后面总是跟着一个console.log('no'),我不知道为什么

但是找到了匹配项,因为 console.log(details) 中显示了正确的数据; console.log(snapshot.key);

FBSearch: function(){
var T1 = this
var T2 = this
var T3 = this
var ref = firebase.database().ref("flights");
ref
.orderByChild('date')
.equalTo(T2.flight.dat)
.on('child_added', function(snapshot) {
var details = snapshot.val();
if (details.flight == T1.flight.flt) {
if(details.origin == T3.flight.org){
console.log(details);
console.log(snapshot.key);
console.log('yes')
} else {
console.log('no')
}
} else {
console.log('no')
}
})
}

期望的结果是找到匹配项时显示成功消息

最佳答案

不确定这是否是您问题的答案,但您可能需要考虑...

现在您正在阅读特定日期的所有航类,以检查其中是否存在。这是次优的,并且会浪费用户的大量带宽。理想情况下,像这样的是/否问题应该要求您传递标准,并获得最少的是/否类型的答案。

虽然 Firebase 实时数据库不支持 exists()查询,并且无法查询多个条件,您可以通过向数据添加特殊属性来支持此查询来进行重大改进。

据我所知,您正在过滤三个属性:date , flight ,和origin 。我建议向所有航类添加一个额外的属性,将这些属性的值合并为一个值。我们将此属性称为 "origin_date_flight"

有了该属性,您可以运行以下查询来检查特定组合是否存在:

ref
.orderByChild('origin_date_flight')
.equalTo(`${T3.flight.org}_${T2.flight.date}_${T1.flight.flt}`)
.limitToFirst(1)
.once('value', function(snapshot) {
if (snapshot.exists()) {
console.log('yes')
} else {
console.log('no')
}
})

这里的主要变化:

  • 查询使用复合属性作为排序索引,这使其能够查询您要查找的特定组合。
  • 查询使用 limitToFirst(1) 。由于您只想查看某个值是否存在,因此无需检索多个结果(如果存在)。
  • 查询使用 once("value" ,这允许它在单个回调中检查存在和不存在。 child_added仅当匹配存在时才会触发事件,因此不能用于检测不存在。

作为奖励,这个新属性还允许您今天搭乘从阿姆斯特丹出发的所有航类:

ref
.orderByChild('origin_date_flight')
.startAt(`AMS_20190728_${T2.flight.date}_`)
.endAt(`AMS_20190728_${T2.flight.date}~`)
.once('value', function(snapshot) {
snapshot.forEach(function(flightSnapshot) {
console.log(flightSnapshot.key+": "+flightSnapshot.child("flt").getValue());
})
})

另请参阅:

关于javascript - 如何检查 Firebase 中的数据搜索是否成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57241497/

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