更新AngularFirestoreDocument不起作用

时间:2018-06-19 19:47:59

标签: angular typescript firebase google-cloud-firestore angularfire2

我正在使用Angular和Firestore

我想做什么

  • 遍历Firestore集合

  • 更改该集合中每个AngularFirestoreDocument中字段的值

这是我领取minutes收藏集的地方

export class MinutesComponent {
  minutesArray: AngularFirestoreCollection<any>;
  minutes: Observable<any[]>;

  constructor(private afs: AngularFirestore) {
    this.minutesArray = afs.collection<any>('minutes', ref => ref.orderBy('year', 'desc'));
    this.minutes = this.minutesArray.valueChanges();
    ...
  }
}

在我的构造函数中,这就是我尝试更新每个文档的方式

this.minutes.subscribe(minutes => {
  minutes.forEach(minute => {

  ####RETRIEVES INDIVIDUAL DOCUMENT FROM DATABASE 
  const minuteRef = this.afs.doc(`minutes/${minute.id}`);

  if (minute.month === 'January') {
    minuteRef.update({'month': 1 });
  } else if (minute.month === 'jan') {
    minuteRef.update({'month': 1 });
  } else {
    minuteRef.update({'month': 2 });
  }
});

有什么想法吗?我想遍历文档集合并更新集合中每个文档的字段值。

例如,如果

document.month = january

我想将其更改为

document.month = 1

谢谢。

1 个答案:

答案 0 :(得分:1)

valueChanges()不包含您的通话记录ID。如果您需要访问ID,则应使用snapshotChanges()

更改此行this.minutes = this.minutesArray.valueChanges();

this.minutes = this.minutesArray
    .snapshotChanges()
    .pipe(
        map(actions => actions.map(a => {
            const data = a.payload.doc.data();
            const id = a.payload.doc.id;
            return { id, ...data };
        }))
    );