【问题标题】:Swift: Find whether or not a member exists in Firebase DatabaseSwift:查找 Firebase 数据库中是否存在成员
【发布时间】:2016-07-07 19:25:29
【问题描述】:

我是 Firebase 的新手,对 Swift 还是很陌生,我发现我在使用查询检索数据时遇到了问题。

我的目标如下:

  1. 查找特定用户属于哪些组

我尝试通过创建仅包含组成员的对象(使用它的 AutoId 键)来展平数据。

{ groupMembers: 
        -KM0fTdaN2D_BKkvlk34:
             user1: true
             user2: true
             user3: true
         }
         -KM4ZaXCvALCV_gN74U8: {
             user3: true
             user4: true
         }
}

我尝试使用以下代码运行用户列表,尝试仅拉取相关组。不幸的是,我收到了 InvalidQueryParameter 错误。

let groupMemberRef = rootRef.child("groupMembers")
func userFilter(list: [String]) {
// list is a list of different users (strings) I'm looking through the groups to try to find
for user in list {
    groupMemberRef.queryEqualToValue(true, childKey: user).observeSingleEventOfType(.ChildAdded, withBlock: { (snapshot) in
        print(user)
        print(snapshot)
        print(snapshot.hasChild(user))
    })
}

我是否朝着正确的方向前进?我已经尝试了许多其他策略来链接方法,但没有任何运气。 感谢您的帮助 - 我真的非常感谢!

【问题讨论】:

    标签: ios swift firebase swift2 firebase-realtime-database


    【解决方案1】:

    您需要在每个用户下存储一个组 ID 列表,跟踪每个用户所在的组。 你的数据库结构应该是这样的:

    Users: {
    User_id_1: { 
    Name: "user name",
    ...
    Groups: {
    group_id_1: true,
    group_id_2: true,
    ...
    }
    }
    },
    Groups: {
    group_id_1: {
    user_id_1: true,
    ...
    }
    }
    

    【讨论】:

    • 考虑到我在苦苦挣扎后的初始实施,默认下载我所有的组数据,这要好得多!我猜您会选择在此切换后删除我上面的​​ groupMembers 数组(将代码更改为这个新模型后我似乎不需要它)?
    • 根据您的需要,groups 对象应该包含一个组 id,并且在该组下您可能需要该组的任何属性,例如“组名”或包含其中人数的计数器(这比每次都计算成员要好),此外它还应该具有包含所有用户 ID 的“成员”属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多