gpt4 book ai didi

javascript - Firebase rtdb 如何使用 orderByKey、startAt、endAt 查询一系列字符串?

转载 作者:行者123 更新时间:2023-12-02 21:54:20 24 4
gpt4 key购买 nike

我有一个 Firebase 查询,如下所示:

this.db.object(`...irrelevent`).query
.orderByKey().startAt(startVal).endAt(`${endVal}\uf8ff`).once('value').then(res => {
if (res.val()) {
// value returned
}
});

我正在查询的区域的结构如下所示

Structure of Data

根据发现的文档 here当使用按键排序功能时,它首先尝试将键按数字排序,然后按字典顺序排序。正如您在图片中看到的,我的键是字符串。

startVal = "0015"endVal = "0060" 时,查询不太有效,因为它返回此 {0000-0015: "a ”,0015-0075:“-M-BCseCnboNM9zB3o5S”}。根据我的理解,它不应该返回对象的第一个属性,但是当我设置 startVal = "0795"endVal = "0810" 时,它返回:

{0000-0015: "a"
0015-0075: "-M-BCseCnboNM9zB3o5S"
0150-0240: "-M-BCxH9URUtYQg06wXE"
0300-0360: "-M-BD-YIAXO2FMVac0PW"}

这对我来说似乎不正确,因为它不应该返回任何内容,因为 startAt“0795”和 endAt“0810”的字符串之间不存在数据。

我的目标是能够传入一个startVal(例如“0000”)和一个endVal(例如“0030”)并返回

{0000-0015: "a"
0015-0075: "-M-BCseCnboNM9zB3o5S"}

有人可以让我直接理解 startAt 和 endAt 查询在查询一系列字符串时如何工作吗?

最佳答案

我认为您在这里看到了某种数组强制。

我用这个 JSON 进行了测试:

{
"0000-0015": "a",
"0015-0075": "-M-BCseCnboNM9zB3o5S",
"0150-0240": "-M-BCxH9URUtYQg06wXE",
"0300-0360": "-M-BD-YIAXO2FMVac0PW",
"key-0000-0015": "a",
"key-0015-0075": "-M-BCseCnboNM9zB3o5S",
"key-0150-0240": "-M-BCxH9URUtYQg06wXE",
"key-0300-0360": "-M-BD-YIAXO2FMVac0PW",
}

这段代码:

function query(start, end) {
ref.orderByKey().startAt(start).endAt(end)
.once('value').then(snapshot => {
console.log(`startAt("${start}").endAt("${end}"): ${snapshot.numChildren()} result(s)`)
snapshot.forEach((child) => {
console.log(`"${child.key}"`)
});
});
}

query("0000", "0015");
query("0000-", "0015~");
query("0015-", "0060~");
query("key-0000", "key-0015");

我得到的输出是:

startAt("0000").endAt("0015"): 0 result(s)
startAt("0000-").endAt("0015~"): 2 result(s)
"0000-0015"
"0015-0075"
startAt("0015-").endAt("0060~"): 1 result(s)
"0015-0075"
startAt("key-0000").endAt("key-0015"): 1 result(s)
"key-0000-0015"

除了第一个结果之外的所有结果看起来都是正确的,这就是为什么我认为这些数字以某种方式通过(未填充的)数组索引进行转换(因此 0 而不是 "0000" ),这样就不起作用了。

我建议始终在数字键前添加字母数字字符串作为前缀,以防止出现此类行为,就像我在上面使用 key- 前缀所做的那样。

有关我的完整测试台,请参阅:https://jsbin.com/roluhip/2/edit?js,console

关于javascript - Firebase rtdb 如何使用 orderByKey、startAt、endAt 查询一系列字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60050321/

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