Firebase 查询以在 iOS swift 中通过用户 ID 获取特定用户

Posted

技术标签:

【中文标题】Firebase 查询以在 iOS swift 中通过用户 ID 获取特定用户【英文标题】:Firebase query to fetch specific users by their user IDs in iOS swift 【发布时间】:2017-05-17 14:57:20 【问题描述】:

我有一个这样的 firebase 数据库结构

"Users": 
    "ghjghjFc1S3KO0y8yJwORdfgret":    //user ID
              "name": "John" 
    

    "3uqWZJRFc1S3KO0y8yJwORTMtWC2":    //user ID
              "name": "Smith"
    

    "4SrHGdRFc1S8KO0y8yJwORTMtQAR":    //user ID
              "name": "Alan"
    

    "5fvxhaxFc1S8Kf0ygyJwORyMtFdy":    //user ID
              "name": "Ben"
    


我有一个数组:usersToRetreive = ["5fvxhaxFc1S8Kf0ygyJwORyMtFdy", "3uqWZJRFc1S3KO0y8yJwORTMtWC2"]

我只想检索那些用户 ID 在数组“usersToRetreive”中给出的用户

firebase 是否支持这种类型的查询?如果是,那么我该如何快速进行此查询?

【问题讨论】:

也许在添加新问题之前先从谷歌搜索开始? 我没有找到答案,这就是我在这里发帖的原因。 【参考方案1】:

是的,Firebase 确实支持这种类型的查询。您必须在数据库引用上使用 orderByChild() 方法。这个 Firebase Youtube 视频介绍了如何做到这一点。

Common SQL Queries converted for the Firebase Database - The Firebase Database For SQL Developers #4

【讨论】:

感谢 Philip 分享此视频非常有帮助,但我找不到问题的解决方案。我只想将一组用户 ID 提供给 firebase,它会将过滤后的用户返回给我。我想避免在客户端出现长循环。【参考方案2】:

据我所知,您正在尝试获取特定用户的所有信息,这些信息在您的 Arraylist 中由他们的 ID 号给出。

首先这种数据映射结构无法与firebase竞争。没有具体的简单方法可以做到这一点。如果您获取所有数据然后在本地搜索,那将非常昂贵。如果您使用这种方式,您可以复制写有他们的 ID 号的用户的信息.. 因为 100 万个字符将花费大约 2MB .. Firebase 中重要的是您如何使用 TRAFFIC。不是内存。 您也可以使用 Firebase BIGDATA 查询。

【讨论】:

【参考方案3】:

只需对数组执行 for 循环并分别获取每个用户,看不出有什么大问题..

【讨论】:

因此,如果该数组中有 1000 个 ID,那么它将调用 firebase 1000 次来获取该用户。这是好习惯吗? 是的,没关系。如果您担心,那么只需获取所有用户并在客户端过滤列表。 这是最简单但不好的方法(想象一下如果用户数以百万计或数组包含数千个 ID)。我在想应该有一种有效的方法来做到这一点。

以上是关于Firebase 查询以在 iOS swift 中通过用户 ID 获取特定用户的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift:查询完成后将数据传递给其他 VC 的最佳方式

(Swift) 如果我的节点是自定义索引的,如何只查询当前用户的实时数据的快照?

Firebase queryEqualToValue 在 Swift 2.3 中获取密钥

将 async/await (Swift 5.5) 与 firebase 实时数据库一起使用

更改约束以在 swift iOS 中扩展视图

查询和 Firebase 中的位置(swift 3)