Firestore перезаписывает уже существующие данные в iOS Swift - PullRequest
0 голосов
/ 11 июня 2018

HoDYPGk4wvhrlgvA3bRYPAromE22 в настоящее время вошел в систему пользователя.В Firestore DB у меня есть последователи и следующие таблицы.Если текущий пользователь нажимает на следующую кнопку, он пишет в следующей таблице - текущий пользователь является идентификатором документа, а затем следующим идентификатором пользователя с логическим значением true.

Вот снимок экрана следующей таблицы. enter image description here

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

вот код, который я пробовал:

 self.db.collection("followers").document(id).setData([API.User.CURRENT_USER!.uid: true])
      self.db.collection("following").document(API.User.CURRENT_USER!.uid).setData([id: true])

, если дать слияние: true после setData, как setDfata ([id: true], merge: true) он говорит, что метод перегружает аргумент.

Я пробовал вот так, но не слишком работает:

     func followAction(withUser id: String) {

    print("withuser:::\(id)")
    let docRef = db.collection("user-posts").document(id)
    print("id::::\(docRef)")

    docRef.getDocument { (document, error) in
        if let document = document, document.exists {

            self.db.collection("followers").document(id).setData([API.User.CURRENT_USER!.uid: true])

             self.db.collection("following").document(API.User.CURRENT_USER!.uid).setData([id: true])

            let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
            print("Document data: \(dataDescription)")

            self.db.collection("feed").document(API.User.CURRENT_USER!.uid).setData([document.documentID: true])

        } else {
            print("Document does not exist")
            self.db.collection("followers").document(id).updateData([API.User.CURRENT_USER!.uid: true])

            self.db.collection("following").document(API.User.CURRENT_USER!.uid).updateData([id: true])
        }
    }

 //        self.db.collection("followers").document(id).setData([API.User.CURRENT_USER!.uid: true])
  //        self.db.collection("following").document(API.User.CURRENT_USER!.uid).setData([id: true])

  //        self.db.collection("following").document(API.User.CURRENT_USER!.uid).setData([id: true])
 // REF_FOLLOWERS.child(id).child(Api.User.CURRENT_USER!.uid).setValue(true)
 // REF_FOLLOWING.child(Api.User.CURRENT_USER!.uid).child(id).setValue(true)

 }

1 Ответ

0 голосов
/ 11 июня 2018

Как правило, здесь я буду использовать автоинкрементный ключ.Following -> AutoKey -> ["followedBy": userId1, followedTo: userId2] потому что Firestore поддерживает запросы, по которым вы можете легко фильтровать пользователей, за которыми кто-то следит.Но, основываясь на комментариях и вашей текущей структуре БД, вам нужно извлечь предыдущие данные перед обновлением, иначе они заменят старые данные.См. Пример ниже:

let followingRef = Firestore.firestore().collection("Following").document("HoDYPGk4wvhrlgvA3bRYPAromE22")
followingRef.getDocument { (snapshot, error) in
    guard let _snapshot = snapshot else {return}

    if !_snapshot.exists {
        /// First time following someone
        followingRef.setData(["6wP1l0yBDDQA146NqNBBzFEgX4u2": true])
        return
    }

    // For next time
    var data = _snapshot.data()
    data["6wP1l0yBDDQA146NqNBBzFEgX4u2"] = true
    followingRef.setData(data)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...