我想用swift 4将对象的字段更新为firestore数据库中的数组。这两个函数(arrayUnion() and arrayRemove())对我不起作用。
这里是我的数据库模式:
我要更新第一个数组元素中的“状态”字段。
请帮助我。
答案 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