Firestore: как обновить конкретное поле документа? - PullRequest
0 голосов
/ 07 ноября 2018

Как получить доступ и обновить определенное поле в угловом пожарном депо: enter image description here

Ответы [ 4 ]

0 голосов
/ 19 июля 2019

Если ваш идентификатор уникален, верните только один результат запроса, я обнаружил, что нет необходимости pipe - map.

updateDoc(_id: string, _value: string) {
  let doc = this.afs.collection('options', ref => ref.where('id', '==', _id));
  doc.snapshotChanges().subscribe((res: any) => {
    let id = res[0].payload.doc.id;
    this.afs.collection('options').doc(id).update({rating: _value});
  });
}
0 голосов
/ 07 ноября 2018

Хорошо, вы должны сделать следующие шаги:

  • Сначала убедитесь, что вы создаете запрос по имени или идентификатору или даже по обоим, он должен быть уникальным
  • Затем вы подписываетесь на этот запрос с помощью snapshotChanges
  • Далее вы получите идентификатор из запрашиваемых объектов
  • После этого вы используете этот идентификатор, чтобы обновить документ с новым значением

Это будет выглядеть примерно так:

updateDoc(_id: string, _value: string) {
  let doc = this.afs.collection('options', ref => ref.where('id', '==', _id));
  doc.snapshotChanges().pipe(
    map(actions => actions.map(a => {                                                      
      const data = a.payload.doc.data();
      const id = a.payload.doc.id;
      return { id, ...data };
    }))).subscribe((_doc: any) => {
     let id = _doc[0].payload.doc.id; //first result of query [0]
     this.afs.doc(`options/${id}`).update({rating: _value});
    })
}
0 голосов
/ 11 ноября 2018

Очень просто (.collection) объявить коллекцию, которую вы хотите изменить. (.doc), чтобы указать идентификатор документа, который вы хотите обновить, и в (.update) просто поместите поле обновления, которое вы хотите изменить,

 constructor(private db: AngularFirestore) {}
 this.db
  .collection('options')
  .doc('/' + 'mzx....')
  .update({rating: value})
  .then(() => {
    console.log('done');
  })
  .catch(function(error) {
   console.error('Error writing document: ', error);
  });
0 голосов
/ 07 ноября 2018

Это должно быть довольно легкой задачей. Вы можете использовать функцию обновления и передать имя и значение поля для обновления.

например:

this.db.doc(`options/${id}`).update({rating:$rating}); //<-- $rating is dynamic
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...