No encuentro nada aquí. Mi pregunta es cómo ACTUALIZAR un documento devuelto en DÓNDE clausula en AngularFire:

constructor(private db: AngularFirestore) { }

var path = this.db.collection('users').doc('type').collection('customer')
.ref.where('name', '==', 'roger');

¿Cómo actualizar a esta usuario?

var query = path.set/update..? 

No funciona.

2
Diego Venâncio 15 feb. 2018 a las 17:31

2 respuestas

La mejor respuesta

Pruebe esto, la consulta le dará una lista que necesita para obtener la identificación y realizar la actualización.

const query = this.db.collection('users').doc('type').collection('customer', ref => ref.where('name', '==', 'roger'));

query.snapshotChanges().map(changes => {
   changes.map(a => {
    const id = a.payload.doc.id; 
    this.db.collection('users').doc('type').collection('customer').doc(id).update({})
  })
}).subscribe();
1
Hareesh 16 feb. 2018 a las 02:50

No entiendo cómo se aceptó la respuesta anterior porque el comportamiento es incorrecto y termina en un bucle infinito (snapshotChanges() activa update(), que nuevamente, activa snapshotChanges() como se ha suscrito. ) Además, este synatx de fuego angular está desactualizado, por lo que señalaré un enfoque diferente.

Para lograr el comportamiento que OP está buscando, la mejor práctica es almacenar el ID del documento en el propio documento. Al crear un elemento, add() devuelve un DocumentReference, que incluye el ID del elemento recién insertado.

Una implementación de ejemplo sería:

 create(user) {
    return new Promise<any>((resolve, reject) => {
      this.db
        .collection('users')
        .doc('type')
        .collection('customer')
        .add(user)
        .then(res => {
          this.updateUserId(res.id);  
        }, err => reject(err));
    });
  }

  updateUserId(id: string) {
    return this.db
      .collection('users')
      .doc('type')
      .collection('customer')
      .doc(id)
      .set({ id: id }, { merge: true });
  }

En este caso, se crearía el usuario e inmediatamente después, se actualizaría el campo id del objeto user (ya que el ID del documento de Firestore solo está disponible después de la inserción). Ahora el usuario puede actualizarse fácilmente a través de la identificación del documento del usuario.

2
Tobias Kaufmann 22 nov. 2019 a las 16:44