2016-11-29 2 views
0

У меня есть instagram, как приложение. я получил firebase в бэкэнде, который имеет:Комплексный запрос Firebase - iOS Swift

почтовый узел - содержит все сообщения от разных пользователей [POST_ID post_user POST_NAME POST_CONTENT]

Проблема: Я хочу, чтобы получить только от должности пользователей, которых я придерживался.

Мои шаги:

  1. Я получил список следующих users_id в массиве

    followersIds 
    
  2. Я хочу знать, могу ли я сделать запрос как

    getFollowersList { (followersIds) in 
    
        print(followersIds) 
    
        self.postRef.queryOrdered(byChild: "user").queryEqual(toValue: followersIds).queryLimited(toLast: limit).observeSingleEvent(of: .value, with: { (snapshot) in 
         if snapshot.value is NSNull { completion(nil); return} 
         else { 
          let dict = snapshot.value as! [String:Any] 
          self.mapDictionaryToArrayOfPost(dict: dict, completion: { (posts) in 
           completion(posts) 
          }) 
         } 
        }) { (error) in 
         debugPrint(error.localizedDescription) 
        } 
    
    } 
    

ВОПРОС: Firebase не может принять массив в качестве параметра в queryEqual()

я могу сделать этот фильтр с помощью фильтрации в приложении, но я хочу, чтобы запросить firebase и получить результат. Фильтр Beacause в приложении не очень хорош.

Любое предложение.

ответ

2

Невозможно выполнить этот запрос за один раз в Firebase. Как часто встречается в большинстве решений NoSQL, вы должны моделировать данные таким образом, чтобы ваши приложения могли использовать приложения.

Это означает, что: если вы хотите получить все сообщения от людей, за которыми вы следуете за один раз, вы должны вести список всех сообщений от людей, которых вы используете в базе данных. Так как вы, кажется, что-то вроде социальной сети строительства, это означает, что вы, по сути стены здания для каждого пользователя:

following 
    uid1 
    uid2: true // so uid1 follows uid2 and uid3 
    uid3: true 
    uid3 
    uid2: true // and uid3 follows uid2 
posts 
    post1 
     author: uid2 // uid2 has made a post 
     title: "...." 
    post2 
     author: uid3 // uid3 has made a post 
     title: "...." 
wall 
    uid1 
    post1: true 
    post2: true 
    uid3 
    post1: true 

Таким образом, в этой модели мы сохраняем ключ каждого поста пользователя, который вы следуете под /wall/myuid , Теперь вы можете легко получить список сообщений, чтобы показать стену конкретного пользователя. И из этого вы можете перебирать ключи и загружать каждый из них. Последнее не является медленной операцией на Firebase, поскольку оно конвейерно обрабатывает запросы. См. Speed up fetching posts for my social network app by using query instead of observing a single event repeatedly.

Этот тип дублирования данных является очень распространенным явлением в базах данных NoSQL, таких как Firebase, поэтому мы рассмотрим его в нашем documentation on structuring data, в нашем firefeed demo app и в нашем новом видео серии Firebase for SQL developers.

Смежные вопросы