【问题标题】:Swift Firebase Query Mid Section of Nodes Without Unique Child ValueSwift Firebase 查询没有唯一子值的节点的中间部分
【发布时间】:2021-04-22 12:14:01
【问题描述】:

对于每个看起来像这样的用户,我有一个节点下的消息的 autoid 键

user1: {
    user2: {
      -MEt4K5xhsYL33anhXpP: 1
      -MEt8BLP2yMEUMPbG2zV: 1
      ...(10 more keys)...
      -MF-Grpl8Jchxpbn2mxH: 1
      -MF-OUjWXsFh7lBPosMf: 1
    }
}

我正在关注将默认值设置为 1 的教程。我现在意识到这可能是一个问题。有没有办法查询“-MEt8BLP2yMEUMPbG2zV”和“-MF-Grpl8Jchxpbn2mxH”之间的键,以便我得到它们之间的 10 个键?我试过这样查询,但没有用。

编辑:澄清一下,我只知道第二个键,例如"-MF-Grpl8Jchxpbn2mxH"

ref.queryEnding(beforeValue: 1, childKey: "-MF-Grpl8Jchxpbn2mxH").queryLimitedToLast(10).observeSingleEventOfType(.Value, withBlock: { snapshot in

query mid-section of firebase database in swift

我看过这篇有类似问题的帖子。他们通过按时间戳排序来解决,但我想知道我当前的实现是否有办法这样做。

【问题讨论】:

    标签: swift firebase


    【解决方案1】:

    您没有在任何东西上订购 ref,这意味着它默认将您的 beforeValue 解释为键。

    你想要的是:

    var ref = Database.database().reference("user1/user2")
    
    ref.queryOrderedByKey()
       .queryStarting(atValue: 1, childKey: "-MEt8BLP2yMEUMPbG2zV")
       .queryEnding(atValue: 1, childKey: "-MF-Grpl8Jchxpbn2mxH")
       ...
    

    由于您知道开始键和结束键,因此无需同时指定限制,尽管您可以根据需要这样做。

    【讨论】:

    • 我只知道第二把钥匙。我将其用于聊天功能,并尝试在每次用户向上滚动以加载更多消息时获取多个消息 ID,例如以上10个“-MF-Grpl8Jchxpbn2mxH”
    • 谢谢,虽然我需要按键订购
    【解决方案2】:

    我最终这样做了。我认为 atValue 需要为 1,但它应该是消息 ID,我需要 orderByKey。

    ref.queryOrderedByKey().queryEnding(atValue: "-MF-Grpl8Jchxpbn2mxH").queryLimited(toLast: 10)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多