【问题标题】:How can i update an object (map) in an array with swift in firestore database?如何在 firestore 数据库中使用 swift 更新数组中的对象(地图)?
【发布时间】:2019-05-13 19:26:44
【问题描述】:

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

这里是我的数据库架构:

enter image description here

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

请帮帮我。

【问题讨论】:

  • 继续添加您的一些代码,以便我们更好地帮助您。
  • @JoeyPhillips 帖子已更新。
  • 他的意思是在问题中添加代码。请不要在您的问题中包含图片或链接。包括代码和结构作为文本。要获取您的 Firebase 结构,请使用 Firebase 控制台->导出 JSON,然后复制并粘贴您的结构的 sn-p。见images and links are evil。要获取代码,请使用工具栏中的 {} 将文本代码复制并粘贴到问题和格式中以便于阅读。另外,请澄清这个问题,因为它没有意义。
  • 虽然@dougstevenson 有一个很好的答案,但另一种选择是只更新特定字段,而不是读取整个文档,修改它并将其写回。因此,您可以查看这两个答案,看看哪一个最适合您的用例。

标签: ios firebase google-cloud-firestore swift4


【解决方案1】:

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

【讨论】:

  • 我不确定为什么将其发布为答案,因为它没有回答 如何更新对象(字段) 的问题。其次,将该数组更改为子集合可能不是最佳选择;您应该将用户更改为存储为集合 (/users) 中的文档,使用 uid 作为每个用户节点的 documentID(键)。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我认为问题是:

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

    只要您知道要更新的文档的 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 2021-02-02
      • 2020-03-02
      • 2020-12-20
      • 2019-09-14
      相关资源
      最近更新 更多