web-dev-qa-db-fra.com

Comment vérifier si un document de stockage en nuage existe lors de l'utilisation de mises à jour en temps réel

Cela marche:

db.collection('users').doc('id').get()
  .then((docSnapshot) => {
    if (docSnapshot.exists) {
      db.collection('users').doc('id')
        .onSnapshot((doc) => {
          // do stuff with the data
        });
    }
  });

... mais cela semble verbeux. J'ai essayé doc.exists, mais cela n'a pas fonctionné. Je veux juste vérifier si le document existe avant de m'abonner aux mises à jour en temps réel. Ce get initial semble être un appel à la db.

Y a-t-il un meilleur moyen?

10
Stewart Ellis

Votre approche initiale est correcte, mais il peut être moins détaillé d’attribuer la référence du document à une variable comme ceci:

const usersRef = db.collection('users').doc('id')

usersRef.get()
  .then((docSnapshot) => {
    if (docSnapshot.exists) {
      usersRef.onSnapshot((doc) => {
        // do stuff with the data
      });
    } else {
      usersRef.set({...}) // create the document
    }
});

Référence: Obtenir un document

27

Si vous utilisez Angular, vous pouvez utiliser le paquet AngularFire pour le vérifier avec un observable.

import { AngularFirestore, AngularFirestoreDocument } from '@angular/fire/firestore';

constructor(private db: AngularFirestore) {
  const ref: AngularFirestoreDocument<any> = db.doc(`users/id`);
  ref.get().subscribe(snap => {
    if (snap.exists) {
      // ...
    }
  });
}
0
galki