- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Firebase 查询,如下所示:
this.db.object(`...irrelevent`).query
.orderByKey().startAt(startVal).endAt(`${endVal}\uf8ff`).once('value').then(res => {
if (res.val()) {
// value returned
}
});
我正在查询的区域的结构如下所示
根据发现的文档 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/
当我试图通过电子邮件或电话号码查找记录时,我一直在使用下面的两个代码,有时第一个代码工作正常有时不起作用,第二个代码也一样。 下面的代码和什么时候应该使用“equalTo”或“startAt and
我有这个代码,但我不知道如何让歌曲从 0:19 秒开始。你能帮我吗? · ROLEPLAY · var audio = document
与StartAt,StartAtSequence等其他代码相比,我对 StartWithLastReceived subscription option的要求/重要性有些困惑。 我试图深入研究Java
好像 query.startAt 规则被破坏了,或者我不明白。有人可以确认吗?这是最小的可重现错误。 Live example ;使用 CTRL+SHIFT+i 打开 Chrome 控制台。 GitH
我在我的 Android 应用程序中使用查询时遇到了一些问题。我的数据库最终将有成百上千个轮询对象。我想一次获得大约 20 个,一旦完成这 20 个,我将获得下一个 20 个。我可以轻松获得前 20
我的实时数据库节点结构如下: Bookings{ carID1{ BookingStartTime: some POJO BookingStartTime:
我执行以下查询: firebase.database().ref().child('files').child('54a8924f8c417b2a281f4e3a4c639785/').orderBy
我已经为作业定义了以下触发器: var postbagJobTrigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity(
infiniteHandler($state) { var next = db .collection("posts") .orderBy("timestamp
我的数据从纪元开始以小时为单位存储。我只想获取数据的一部分 - 例如,我想指定我希望所有数据都从 453615 开始。 到目前为止我得到了这段代码: this.dbService.database
让我们假设上面的 Firebase 数据库架构。 我想要的是检索“15039996197”时间戳之后的消息。每个消息对象都有一个createdAt属性。 如何才能仅在特定时间戳之后获取消息?在本例中,
我想使用 startAt() 和 endAt() 方法,但我不完全理解它们是如何工作的。 假设我有当前的数据库 "users" : { "someUser1" : { "email
我正在尝试使用游标,但是每当我查询它时,我都得不到任何结果。例如,下面返回 0, null const next = admin.firestore().collectionGroup('extIte
Firebase 数据库 startAt(boolean) 做什么? Firebase documentation说: Create a query constrained to only retur
正打算将其发布到他们的 github 存储库,但似乎他们更喜欢在这里提出一般性问题。 那么使用startAt()从firebase数据库获取数据时参数有字符串长度限制吗? 我遇到了一个问题,它似乎仅限
我正在尝试使用 firebase 制作 android 应用程序,我想使用 startAt() 在 firebase 上使用搜索功能。但是结果让我很困惑。 我有一些像这样的 Firebase 数据。
我正在开发一个使用 Firebase 作为后端的 Android 应用程序。我是 Firebase 的新手,遇到了一个问题,问题是当我尝试使用 startAt 查询搜索记录时,它返回的结果不是以我输入
这段代码工作正常。 我想要的唯一改进是 - 当我传递“Pi”时,它获取所有以名称“Pi”开头的项目对象,但是当我输入“pi”时它什么都不返回! 这意味着我希望此方法 startAt(itemName)
- foo |--- -LK7rNAPKZP7drHK1eb_ |- timeStamp: 1534966072658 |--- -LKAPfu2lLl2B5zInIhX |-
在我的 firestore 数据库中,有 12+ 个文档。我通过调用以下函数 on button click 正确获取了前 3 个文档.但是在 secondclick ,尽管正确传递了 documen
我是一名优秀的程序员,十分优秀!