Firestore更新数组中的特定元素

时间:2018-11-15 12:28:10

标签: angular firebase google-cloud-firestore

我正在将Google Firestore与Angular结合使用,我正在尝试更新数组中的特定元素。

我尝试了很多事情,但一点都不成功。

我如何才能到达公司数组中的特定公司索引?

谢谢:)

enter image description here

2 个答案:

答案 0 :(得分:0)

  

我如何才能到达公司数组中的特定公司索引?

您无法根据相应的索引获取,更新或删除Firestore数组中的元素。试想一下,如果一个用户想要编辑索引0处的值,而另一个用户想要删除索引0处的值,而另一个用户想要在索引1处添加另一个值,那会发生什么?结果截然不同,ArrayIndexOutOfBoundsException为何呢?因此,带有数组的Firestore操作有点不同。因此,您无法执行特定操作,例如在特定索引处插入,更新或删除。因此,仅在不关心存储元素的确切顺序时才使用数组。

Firestore于几周前添加了一些功能,以添加或删除特定元素,但前提是不关心它们的确切位置。请参阅here官方文档。

在您的情况下,您没有简单的字符串数组,而有一个对象数组,这意味着为了进行一些改动,您应该获取整个对象,遍历属性,进行必要的更改并将其写回数据库。

答案 1 :(得分:0)

好的,有一种查询数组的方法。

如果这行得通,我不是100%,但我之前曾尝试过。它可能需要完整的对象。

this.usersCollection = this.afs.collection('Users', ref => ref.where('companies', 'array-contains', {location: 'test'}) );

如果这不起作用,您始终可以选择与其中的公司作为文档的子集合。