【问题标题】:Firebase startAt String only takes first characterFirebase startAt String 只需要第一个字符
【发布时间】:2018-06-06 19:49:33
【问题描述】:

我在 xyz 下有如下结构

{
    "pushKey000": {
        "findKey": "john_1",
        "userName": "john",
        "topic": 1
    },
    "pushKey001": {
        "findKey": "john_2",
        "userName": "john",
        "topic": 2
    },
    "pushKey002": {
        "findKey": "joel_1",
        "userName": "joel",
        "topic": 1
    }
}

现在我正在尝试查询所有条目的数据,其中 findKey 以“john”开头。我尝试了以下方法:(例如使用 REST)

https://abc.firebaseio.com/xyz.json?orderBy="findKey"&startAt="john"

这给了我所有的结果,包括“joel”。基本上它只使用 startAt 的第一个字符,在本例中为 J

这个firebase video 触发相同类型的查询,但只搜索第一个字符。

我做错了什么还是有其他方法可以使用 findKey 检索它?非常感谢您提前提供帮助

PS:我的 .indexOn 在 findKey 上,无法更改

【问题讨论】:

  • 你正在使用startAt(),所以它只会像函数名称所示的那样从那里开始。我认为您期望的行为类似于contains("john")。如果你想要这种行为,你还需要使用endAt(),我认为是这样的:endAt("john\uf8ff")
  • 嗨@AndréKool。 endAt 为我工作:) 也许我太懒了,太明白了。你能把这个作为答案发布吗?我会标记的:)

标签: firebase firebase-realtime-database


【解决方案1】:

您的代码没有问题,您的期望有问题。 (我一直想把它写成答案:))

startAt() 函数用作查询的起点,而不是过滤器。因此,在您的情况下,它将找到“john”的第一次出现并从该点返回所有内容(包括 Joel、Kevin、Tim 等......)。

不幸的是,没有直接的方法可以查询where findKey contains the string "john"。但幸运的是,有一个(部分)使用endAt() 的解决方法。

您的查询将如下所示:

orderBy="findKey"&startAt="john"&endAt="john\uf8ff"

这里\uf8ff是最后一个unicode字符(如果我错了请纠正我)。

使用它,您可以查询以“john”开头的值,例如“johnnie”、“johnn”、“john”。但不是“1john”或“johm”或“joel”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-13
    • 2016-05-24
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多