Firebase 如何更新在Firestore中存储为FieldValue的数组中元素的值

Firebase 如何更新在Firestore中存储为FieldValue的数组中元素的值,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我在Firestore中的一个文档中存储了一个数组作为字段值。现在我想更新它的一个元素值。根据文档,我可以使用arrayRemove或arrayUnion函数从数组中删除元素,但我没有看到任何更新元素值的方法。是否有任何方法可以帮助我更新元素的值 在这里,我将数组存储在文档的patients字段中。此数组表示患者列表。查看元素的第0个位置。此处状态的值为当前值。我想将此更新为已处理。无论如何,我都可以这样做 还有什么方法可以根据状态键上的值查询数组的元素 根据文档,我可以使用arrayRemov

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

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

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

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

无法使用这些函数中的一个来添加或删除包含对象的数组中的元素。为了能够使用这些函数,数组应该包含例如文本字符串。通过这种方式,可以使用arrayRemove或arrayUnion函数添加或删除其中一个元素

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

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

是否有任何方法可以帮助我更新元素的值

是的,有两种方法可以实现这一点。第一种方法是获取整个文档,获取patients属性作为hashmaps列表,迭代其元素,进行所需的更改,然后将文档写回。第二种方法是将该数组转换为子集合,每个患者都将成为一个文档。通过这种方式,您可以使用相应的函数简单地更新、添加或删除文档

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

使用您当前的文档结构,没有。如果您想根据特定属性的值查询用户的患者,您肯定应该使用第二种方法。使用实际的模式无法实现这一点

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

无法使用这些函数中的一个来添加或删除包含对象的数组中的元素。为了能够使用这些函数,数组应该包含例如文本字符串。通过这种方式,可以使用arrayRemove或arrayUnion函数添加或删除其中一个元素

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

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

是否有任何方法可以帮助我更新元素的值

是的,有两种方法可以实现这一点。第一种方法是获取整个文档,获取patients属性作为hashmaps列表,迭代其元素,进行所需的更改,然后将文档写回。第二种方法是将该数组转换为子集合,每个患者都将成为一个文档。通过这种方式,您可以使用相应的函数简单地更新、添加或删除文档

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


使用您当前的文档结构,没有。如果您想根据特定属性的值查询用户的患者,您肯定应该使用第二种方法。使用实际的模式无法实现这一点。

添加到优秀且公认的答案中。从答案可以看出,阵列的使用具有挑战性。最好让Firestore使用.addDocument swift生成您的documentID。它们是独特的、高度可查询的,并且减轻了NoSQL数据库中数组存在的障碍。从答案可以看出,阵列的使用具有挑战性。最好让Firestore使用.addDocument swift生成您的documentID。它们是唯一的、高度可查询的,并且减轻了NoSQL数据库中数组存在的障碍。