【问题标题】:How to update value of element in an array stored as a FieldValue in Firestore如何更新存储为 Firestore 中的 FieldValue 的数组中元素的值
【发布时间】:2019-11-21 07:07:30
【问题描述】:

我在 Firestore 中的一个文档中存储了一个数组作为 FieldValue。现在我想更新它的元素值之一。根据文档,我可以使用 arrayRemove 或 arrayUnion 函数从数组中删除元素,但我没有看到任何更新元素值的方法。有什么方法可以帮助我更新元素的值。

这里我将数组存储在文档的“患者”字段中。该数组表示患者列表。查看元素的第 0 个位置。这里状态的值是“当前”。我想将此更新为“已处理”。无论如何我可以这样做。

还有什么方法可以根据状态键上的值查询数组的元素。

【问题讨论】:

  • 添加到优秀且被接受的答案。阵列的使用可能具有挑战性(从答案可以看出)。让 Firestore 使用 .addDocument (swift) 生成您的 documentID 可能会更好。它们是独一无二的、高度可查询的,并减轻了数组在 NoSQL 数据库中存在的障碍。

标签: firebase google-cloud-firestore


【解决方案1】:

根据文档,我可以使用 arrayRemove 或 arrayUnion 函数从数组中删除元素。

您无法使用这些函数之一在包含对象的数组中添加或删除元素。为了能够使用这些函数,您的数组应该包含例如文字字符串。这样,您可以使用arrayRemove()arrayUnion() 函数添加或删除其中一个元素。

我没有看到任何更新元素值的方法。

没有更新方法。 arrayUnion() 方法仅在 存在时才会在数组中添加一个新元素。如果要更新元素,必须先从数组中删除它,然后再添加新元素。这也适用于字符串,而 not 适用于对象。

有什么方法可以帮助我更新元素的值。

是的,您可以通过两种方式实现这一目标。第一个是获取整个文档,获取patients 属性作为哈希图列表,遍历其元素,进行所需的更改并将文档写回。第二个是将该数组转换为一个子集合,其中每个患者都将成为一个文档。这样,您就可以使用相应的函数简单地更新添加或删除文档。

还有什么方法可以根据状态键上的值查询数组的元素。

使用您当前的文档结构,不。如果要根据特定属性的值查询用户的患者,则绝对应该使用第二种方法。您无法使用您的实际架构来实现这一点。

【讨论】:

    猜你喜欢
    • 2020-03-02
    • 2020-03-02
    • 2019-08-11
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 2020-10-27
    • 2018-06-09
    相关资源
    最近更新 更多