从 firebase 检索数据并设置 VC 以匹配用户偏好

Posted

技术标签:

【中文标题】从 firebase 检索数据并设置 VC 以匹配用户偏好【英文标题】:retrieve data from firebase and set VC to match users preferences 【发布时间】:2020-11-25 03:13:37 【问题描述】:

我有一个与 tinder 非常相似的 viewController。用户可以根据 Firebase 中存储的值的数量向左或向右滑动。 firebase 中的每个值都会显示在用户 VC 上,无论它是否符合他们的偏好。我想让用户有偏好(再次,非常类似于 tinder。)并且只有在这些限制范围内的值才能显示在 viewController 上。我从 firebase 获取所有值的方式是

    func fetchPost() 
    
    topCardView = nil
    var previousCardView: CardView?
    Database.database().reference().child("Post").observe(.childAdded, with:  (snapshot) in
        
            if let userDictionary = snapshot.value as? [String: AnyObject] 
                
                let poster = Poster(dictionary: userDictionary as [String : AnyObject])
                let cardView = self.setupCardFromUser(poster: poster)
                self.cardViewModels.append(poster.toCardViewModel())
                
                if let currentUser = Auth.auth().currentUser?.uid,
                    currentUser == poster.fromId 
                    cardView.removeFromSuperview()
                     else if self.topCardView == nil 
                      self.topCardView = cardView
                    
                
                previousCardView?.nextCardView = cardView
                previousCardView = cardView
                
        
    
    , withCancel: nil)
   

上面的代码允许用户查看 firebase 中的每一个值。但我想要控制的偏好是成本和技能。

是否有一种简单的方法让我只显示来自 firebase 的值(如果它们与用户的偏好匹配)?

在 firebase 中,usersPreferences 树设置为

users
|______ usersUID
|______ minSeekingCost
|______ maxSeekingCost
|______ skills1

以及帖子的设置方式

post
|____ usersUID
|____ category
|____ cost

我希望用户找到在 min&maxSeekingCost 范围内的帖子,并匹配他们的技能。假设一个帖子与他们的一项技能相匹配,并且价格不在他们的限制范围内,那么它就不会被获取。如果帖子不匹配并且价格在他们的限制范围内,则相同。

我是否必须在 fetchPost 中获取用户偏好?或者我可以操纵 fetchPost 本身来调用这些。

【问题讨论】:

【参考方案1】:

您正在寻找可让您order and filter data 的查询。

但是 Firebase 数据库查询只能对单个属性进行排序/过滤。在某些情况下,可以将要过滤的值组合成单个(合成)属性。有关此方法和其他方法的示例,请在此处查看我的答案:Query based on multiple where clauses in Firebase

【讨论】:

嘿,坦率地说!感谢您的回答!我是新来的查询。我已经发布了我的问题的快速更新。所以你的意思是我不能查询这两个项目? Firebase 实时数据库只能对单个属性进行排序/过滤。我的链接答案显示了(在许多情况下)如何将值合并到一个属性中,以便对多个值进行排序/过滤。如果这不起作用,它还会显示其他解决方法。 最后一个小问题!我是否必须在同一个函数中获取用户信息和帖子信息才能使帖子与用户偏好相匹配?我现在正在尝试并遇到问题哈哈哈 这似乎是一个不同的问题,所以我建议为此打开一个新问题。

以上是关于从 firebase 检索数据并设置 VC 以匹配用户偏好的主要内容,如果未能解决你的问题,请参考以下文章

从Firebase数据库中检索数据列表,并将其组成电子邮件的消息

Objective-C - Firebase 从数据库中检索数据并填充到表中

Buildfire 如何设置 Firebase 以检索和更新插件数据

Firebase 实时数组计数不匹配

从 Firebase 提取的数据中没有出现 UITableViewCells

我如何从firebase检索数据到android listview顶部[重复]