Как я могу обновить объект (карту) в массиве с помощью swift в базе данных firestore? - PullRequest
0 голосов
/ 13 мая 2019

Я хочу обновить поле объекта, который находится в массиве в базе данных firestore, с помощью swift 4. Эти две функции ( arrayUnion () и arrayRemove () ) не работают для меня.

здесь моя схема базы данных:

введите описание изображения здесь

Я хочу обновить поле «Статус» в первом элементе массива.

Пожалуйста, помогите мне.

Ответы [ 3 ]

0 голосов
/ 14 мая 2019

Прежде всего я хочу поблагодарить @Doug Stevenson за его любезный ответ.в моем случае я должен изменить массив объектов на вложенные коллекции.

0 голосов
/ 18 мая 2019

Мне кажется, вопрос в следующем:

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

Пока вы знаете идентификатор документак документу, который вы хотите обновить - вот решение.

Предполагая структуру, аналогичную описанной в вопросе

Friends (a collection)
   0 (a document)
      Name: "Simon"
      Status: "Sent"
   1
      Name: "Garfunkle"
      Status: "Unsent"

, и говорим, что мы хотим изменить статус Garfunkle на Отправлено

Я включу одну функцию для чтения документа 1, функцию Garfunkle, а затем вторую функцию для обновления статуса на отправленное.

Чтение документа по индексу 1 и печать его полей - эта функция предназначена только для тестирования, чтобы показатьзначения поля до и после изменения поля состояния.

func readFriendStatus() {
    let docRef = self.db.collection("Friends").document("1")
    docRef.getDocument(completion: { document, error in
        if let document = document, document.exists {
            let name = document.get("Name") ?? "no name"
            let status = document.get("Status") ?? "no status"
            print(name, status)
        } else {
            print("no document")
        }
    })
}

и вывод

Garfunkle Unsent

, а затем код для обновления поля состояния на Отправлено

func writeFriendStatus() {
    let data = ["Status": "Sent"]
    let docRef = self.db.collection("Friends").document("1")
    docRef.setData(data, merge: true)
}

и вывод

Garfunkle, Sent
0 голосов
/ 13 мая 2019

В транзакции извлеките документ, измените поле объекта так, как вы считаете нужным в памяти на клиенте, а затем обновите все это поле обратно в документ.

...