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

时间:2019-11-21 07:07:30

标签: firebase google-cloud-firestore

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

enter image description here

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

我还可以根据状态键上的值查询数组的元素。

1 个答案:

答案 0 :(得分:3)

  

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

您无法使用这些功能之一在包含对象的数组中添加或删除元素。为了能够使用这些功能,您的数组应包含例如文字字符串。这样,您可以使用import { Component } from '@angular/core'; // This tells TypeScript that you know this will be available globally during runtime. // Unfortunately, RSSParser has no TS Declarations, so you have to use any or make a more concrete type yourself declare const RSSParser:any; @Component({ selector: 'my-app', templateUrl: './app.component.html', styleUrls: [ './app.component.css' ] }) export class AppComponent { title:string = ''; items:Array<any> = []; constructor() { const CORS_PROXY = "https://cors-anywhere.herokuapp.com/" let parser = new RSSParser(); parser.parseURL(CORS_PROXY + 'https://www.reddit.com/.rss', (err, feed) => { if (err) throw err; console.log(feed); this.title = feed.title; this.items = feed.items; }) } } arrayRemove()函数添加或删除其中一个元素。

  

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

没有更新方法。 arrayUnion()方法仅在存在的情况下才会在数组中添加新元素。如果要更新元素,则必须先从数组中将其删除,然后添加新元素。对于字符串,也可以使用,对于对象,

  

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

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

  

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

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