firebase 我怎样才能更新一个对象(Map)在一个数组与swift在firestore数据库?

mnemlml8  于 2023-06-07  发布在  Swift
关注(0)|答案(3)|浏览(314)

我想用Swift 4更新一个对象的字段,该对象位于Firestore数据库的数组中。这两个函数(arrayUnion()和arrayRemove())对我来说不起作用。
这里是我的数据库模式:

我想更新第一个数组元素中的“状态”字段。

irtuqstp

irtuqstp1#

首先,我要感谢@Doug史蒂文森的友好回应。在我的例子中,我必须将对象数组改为子集合。

iezvtpos

iezvtpos2#

我相信问题是:
如何更新存储在数组中的文档中的特定字段。
只要你知道你想要更新的文档的documentId-这里是解决方案。
假设一个结构与问题中的相似

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

然后说我们想把加芬克尔的状态改为发送
我将包括一个函数来读取文档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
qlfbtfca

qlfbtfca3#

在一个transaction中,获取文档,修改客户端内存中适合的对象字段,然后将整个字段更新回文档。

相关问题