Запрос и фильтрация по дочернему элементу, когда дочерний элемент является списком - PullRequest
0 голосов
/ 29 ноября 2018

У меня возникли проблемы с выяснением, как фильтровать и запрашивать, когда мои данные представляют собой список.В моей текущей модели базы данных у меня есть разговоры, а затем под каждым UID участвуют в этом разговоре.Я хочу иметь возможность просматривать все разговоры, частью которых является конкретный пользователь.

database model

Я не уверен, как бы я написал свой код, когда нет настоящего "потомка"

let query = Constants.refs.databaseConvo.queryOrdered(byChild: "").queryEqual(toValue: username)
query.observe(.value, with: { (snapshot) in
    for childSnapshot in snapshot.children {
        print(childSnapshot)
    }
})

1 Ответ

0 голосов
/ 29 ноября 2018

Из-за ограничений запросов Firebase вам нужно будет создать в вашей базе данных новую коллекцию, которая будет отслеживать все разговоры, частью которых является пользователь.Она должна быть структурирована примерно так:

usersConversations {
    userID1 {
        conversationID1: timestamp (or what ever value you would like, I would recommend a timestamp they joined so you can query the latest conversations, etc.)
        conversationID2: timestamp 
        conversationID3: timestamp
    userID2 {
        conversationID1: timestamp
        conversationID2: timestamp
    } ... and so on
}

Вам нужно будет добавлять и удалять эту коллекцию всякий раз, когда пользователь присоединяется или покидает разговор, а также вашу существующую коллекцию conversations.

Затем вы можете получить все разговоры, в которых участвует пользователь с идентификатором userID, выполнив что-то вроде этого:

databaseRef.child("usersConversations").child(userID).observeSingleEvent(of: .value) (snapshot) in {
    if snapshot.exists() {
         // each snapshot child's key will be a conversationID that they are a part of 

    } else {
         // the user is part of no conversations
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...