【问题标题】:Firebase OrderByChild+ EndAt + EqualTo doesn't work on Mobile but works on WindowsFirebase OrderByChild+ EndAt + EqualTo 不适用于移动设备,但适用于 Windows
【发布时间】:2021-11-05 22:56:10
【问题描述】:
"usersPost": {
    "post4543": {
       "userID": "X12",
      "text": "Hi"
    },
    "post4544": {
      "userID": "X12",
       "text": "HELLO"
    },
    "post454S4": {
      "userID": "X143",
       "text": "....."
    }
  }

等于 我只想检索某个用户的帖子,比如说 "userID": "X12"

EndAt,LimitToLast 没有必要下载所有快照(我有 100 万个帖子),所以我将下载限制为 5 个结果。并从最后保存的密钥开始

因此我的代码是

OrderByChild("userID").EndAt(lastSavedKey).EqualTo("X12").LimitToLast(5);
//lastSavedKey is the post key "post4544"

据我所知,这适用于 Windows,但不适用于 Android:

Firebase Query::EqualTo 错误:无法将 equalTo() 与 endAt() 结合

我阅读了一些关于组合多个查询问题的帖子。但是我的情况的替代解决方案是什么? 为什么它可以在 Windows 上运行? Windows 上没有错误!它完美地工作并且 EndAt 最后保存的密钥。 (我使用 Unity 编辑器)

【问题讨论】:

    标签: c# firebase unity3d firebase-realtime-database


    【解决方案1】:

    要实现分页,您需要记住 两个 节点开始/结束的值:

    • 它的钥匙
    • 您排序的属性的值

    如果您只想返回 userID 等于 X12 的节点,并以键 lastSavedKey 结束,您可能可以这样做:

    OrderByChild("userID").StartAt("X12").EndAt("X12", lastSavedKey).LimitToLast(5);
    

    我在这里说可能,因为我从未尝试过 startAt 和 endAt 与键的组合。如果这不起作用,请删除 StartAt 子句 - 在这种情况下,您可能只是在应用程序代码中删除了一些具有不同 userID 的节点。

    【讨论】:

    • 您的代码有效!有趣,所以不需要EqualTo。我没有删除StartAt
    猜你喜欢
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多