Функция getDocuments () получает одни и те же данные более одного раза - PullRequest
0 голосов
/ 21 января 2020

Я перехожу с реляционной базы данных на NO SQL, и я уже прочитал всю документацию Firebase, и теперь я приступаю к учебному проекту, чтобы узнать больше об этом.

Я пытаюсь сделать следующее: у меня есть user_profile , где каждый пользователь, созданный с помощью Auth , получит один документ.

Внутри этого документа у меня есть массив с именем groups , который показывает все группы, к которым присоединился этот пользователь.

Мне нужно получить список этих групп в соответствии с зарегистрированным пользователем дюймы

*This is my current DB*

My DB

Затем я использую getDocuments () для получения этой информации из БД.

Мне нужно получить массив строк с group_id (в секунду pi c).

Мой текущий код извлекает нужную мне информацию, но получает все идентификаторы как один объект. Так что, если у меня есть 4 группы, он извлечет 4 объекта, содержащие все 4 группы, к которым присоединился пользователь.

func getGroups() -> [String] {

    let currentUser = Auth.auth().currentUser?.uid
    let db = Firestore.firestore()
    var groups = [""]
    var groupsArray = [""]

        db.collection(K.Collections.userProfile)
            .whereField(K.DBFields.UserProfile.userId, isEqualTo: currentUser!)
            .getDocuments { (snapshot, error) in
            if let error = error  {
                print(error)
            } else {

                for document in snapshot!.documents {
                    groups = (document.get("groups")) as! [String]
                    //groupsArray.append(groups)
                    print("Group ID: \(groups)")
                    }
            }
        }
return groups
}

И результат, который я получаю, показан ниже:

идентификатор группы: ["8m0W7cQLuSjQCJes2fpL", "l84GnZSpIUs43cXO13Qm", "unb0LPYOttDN6Wgxhghghghgt") ID: [ "8m0W7cQLuSjQCJes2fpL", "l84GnZSpIUs43cXO13Qm", "unb0LPYOttDN6WogRXDt", "ohG09dwyVrAd6GcXa6mx"] Идентификатор группы: [ "8m0W7cQLuSjQCJes2fpL", "l84GnZSpIUs43cXO13Qm", "unb0LPYOttDN6WogRXDt", "ohG09dwyVrAd6GcXa6mx"] Идентификатор группы: [ "8m0W7cQLuSjQCJes2fpL", "l84GnZSpIUs43cXO13Qm" , "unb0LPYOttDN6WogRXDt", "ohG09dwyVrAd6GcXa6mx"]

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

Еще раз, я просто хочу получить этот массив в качестве результата: var groups = ["8m0W7cQLuSjQCJes2fpL", "l84GnZSpIUs43cXO13Qm", "unb0LPYOttDN6WogRXDt", "ohG09dwyXa404x4406") «Amato

Ответы [ 2 ]

1 голос
/ 21 января 2020

Вы извлекаете значения из groups как [String] (строковый массив). Но затем вы печатаете этот строковый массив как одно значение.

Если вы хотите получить доступ к отдельным элементам [String] в Swift, вы можете l oop поверх него:

groups = (document.get("groups")) as! [String]
for group in groups {
    print("Group ID \(group).")
}

Также см. Документацию Swift по доступу к значениям массива .

0 голосов
/ 21 января 2020

Я не очень представляю Swift, но в "узле" были разные результаты, когда я пытался использовать вместо карты. Вы должны использовать следующее:

let dataDescription = snapshot .data (). map (String.init (описывает :)) ?? «nil»

print («Данные документа: (dataDescription)»)

Показано здесь

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