Esto funciona:
db.collection('users').doc('id').get() .then((docSnapshot) => { if (docSnapshot.exists) { db.collection('users').doc('id') .onSnapshot((doc) => { // do stuff with the data }); } }); ... pero parece detallado. doc.exists , pero eso no funcionó. Solo quiero verificar si el documento existe, antes de suscribirme a las actualizaciones en tiempo real. Ese get inicial parece una llamada desperdiciada a la base de datos.
¿Hay una mejor manera?
Su enfoque inicial es correcto, pero puede ser menos detallado asignar la referencia del documento a una variable como esta:
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 } });Referencia: Obtener un documento
Por favor, compruebe el siguiente código. Puede que te ayude.
const userDocRef = FirebaseFirestore.instance.collection('collection_name').doc('doc_id'); const doc = await userDocRef.get(); if (!doc.exists) { console.log('No such document exista!'); } else { console.log('Document data:', doc.data()); }Sé que es tarde, pero en realidad es snapshot.empty not snapshot.exists . snapshot.empty comprueba si existe un documento y lo devuelve en consecuencia. feliz codificación 😊