如何在Firestore数据库中快速更新数组中的对象(地图)?

时间:2019-05-13 19:26:44

标签: ios firebase google-cloud-firestore swift4

我想用swift 4将对象的字段更新为firestore数据库中的数组。这两个函数(arrayUnion() and arrayRemove())对我不起作用。

这里是我的数据库模式:

enter image description here

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

请帮助我。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

首先,我要感谢@Doug Stevenson的友善回应。 就我而言,我必须将对象的数组更改为子集合。

答案 2 :(得分:0)

我相信问题是:

  

如何更新存储在文档中的特定字段   数组。

只要您知道要更新的文档的documentId-这就是解决方案。

假设结构类似于问题中的内容

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