Я работаю над приложением в стиле Instagram, в котором есть сообщения и несколько пользователей. Облачное хранилище пожаров структурировано следующим образом:
Коллекция: «Пользователи» -> Документы: «имя пользователя» -> Коллекция: «Сообщения» -> Документы: «отдельные сообщения»
Как вы видите, я настроил его так, чтобы коллекция Users содержала кучу документов, каждый из которых представлял имя пользователя для всех пользователей, использующих приложение. Каждый документ с именем пользователя имеет свою собственную коллекцию, называемую «Сообщения», в которой хранятся все сделанные им сообщения, и каждая публикация является документом в этой коллекции.
Мой вопрос: как я могу получить доступ к этой коллекции сообщений для каждого пользователя в моя база данных?
Сейчас я пытаюсь перебрать все документы с именами пользователей в коллекции Users, получить доступ к их коллекции Posts и вызвать функцию в этой коллекции, которая уже работает, которая создает и добавляет сообщения в фид. Моя проблема в том, что я могу получить доступ к этой коллекции сообщений, которая так глубоко вложена в облачное хранилище пожаров.
func allUsers() {
let users = db.collection("Users")
users.getDocuments { (snapshot, error) in
if error != nil {
debugPrint("Error getting the users from firebase.")
} else {
for document in (snapshot?.documents)! {
self.getPost(document: document)
}
}
}
}
Вот как я пытаюсь перебрать каждое имя пользователя. Для каждого имени пользователя в коллекции User я вызываю свою функцию getPost.
func getPost(document : QueryDocumentSnapshot) {
let theData = document.data()
let theDocument = theData["Posts"] as? CollectionReference
theDocument!.getDocuments { (snapshot, error) in
if error != nil {
debugPrint("Error getting the data from firebase.")
} else {
for document in (snapshot?.documents)! {
let _data = document.data()
let _image = _data["image"] as? String ?? "Anonymous"
let _username = _data["username"] as? String ?? "Anonymous"
let _location = _data["location"] as? String ?? "Anonymous"
let _description = _data["description"] as? String ?? "Anonymous"
let _quantity = _data["quantity"] as? String ?? "Anonymous"
let _phone = _data["phone"] as? String ?? "Anonymous"
let _date = _data["date"] as? Date ?? Date()
// Points to the storage
let _storageRef = storage.reference()
// Points to the images folder
let _folderRef = _storageRef.child("images")
// Points to the the image under the images folder
let _fileRef = _folderRef.child("\(_image).jpg")
//get the associated post image
_fileRef.getData(maxSize: 10 * 1024 * 1024) { (data, error) in
// Create a UIImage, add it to the array
if let error = error {
print(error)
} else {
let loadedImage = UIImage(data: data!)
self.addToPrevious(thePost: Post(image: loadedImage, username: _username, location: _location, description: _description, quantity: _quantity, phone: _phone, date: _date))
self.posts.append(Post(image: loadedImage, username: _username, location: _location, description: _description, quantity: _quantity, phone: _phone, date: _date))
}
}
}
}
}
}
Я пробежал через отладчик и в моей функции allUsers он не видит никаких документов (которые являются именами пользователей) в коллекции Users. Однако в коллекции Users определенно есть документы с именами пользователей, поэтому я не уверен, почему она их не видит
Мой главный вопрос: как я могу перебрать подколлекцию Posts? Причина, по которой мне нужно это сделать, заключается в том, что в приложении есть основной канал для каждого пользователя, и этот основной канал должен отображать сообщения всех остальных пользователей приложения. Мне нужно было бы получить доступ к сообщениям каждого другого пользователя, чтобы выполнить эту задачу.