Удаление одного элемента с карты удаляет все элементы - PullRequest
0 голосов
/ 14 октября 2019

У меня есть простая карта в моей базе данных Firestore, выглядит так: enter image description here

Я пытаюсь удалить только один элемент с карты following, вот так:

func removeUserFromFriendsList(friendToRemove id: String, _ currentUserId: String, completion: @escaping(Bool)->()) {
    let friendsRef = db.collection(USERS_COLLECTION).document(currentUserId)
    friendsRef.updateData([
        USER_FOLLOWING: FieldValue.arrayRemove([id])
    ]) { (error) in
        if error != nil {
            completion(false)
        }
        completion(true)
    }
}

, но вместо того, чтобы удалить элемент с ID, который я получил, он удаляет весь список внутри following

Ответы [ 2 ]

1 голос
/ 14 октября 2019

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

func removeUserFromFriendsList(friendToRemove id: String, _ currentUserId: String, completion: @escaping(Bool)->()) {
        let friendsRef = db.collection(USERS_COLLECTION).document(currentUserId)
        friendsRef.updateData([
            USER_FOLLOWING + "." + id : FieldValue.delete()
        ]) { (error) in
            if error != nil {
                completion(false)
            }
            completion(true)
        }
    } 

USER_FOLLOWING - это имя поля в базе данных (иначе, «после»).

Добавление +"." + и идентификатор просто указывают, какой идентификатор мы хотим удалить, поэтому выглядит так:

following.AP3ENXgW2mhvaWsUeDOxchYaAGm1 <--- the field and id to delete

, а затем с помощью FieldValue.delete полностью его удаляем.

РЕДАКТИРОВАТЬ:Ответ найден здесь:

Как удалить элемент массива из вложенного документа в firebase?

0 голосов
/ 14 октября 2019

По примеру из документации Firebase :

let friendsRef = db.collection(USERS_COLLECTION).document(currentUserId)

// Atomically removes an ID from the "USER_FOLLOWING" array field.
friendsRef.updateData([
    "USER_FOLLOWING": FieldValue.arrayRemove([id])
])

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

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