This works:
db.collection('users').doc('id').get() .then((docSnapshot) => { if (docSnapshot.exists) { db.collection('users').doc('id') .onSnapshot((doc) => { // do stuff with the data }); } });
... but it seems verbose. I tried doc.exists
, but that didn't work. I just want to check if the document exists, before subscribing to realtime updates on it. That initial get seems like a wasted call to the db.
Is there a better way?
You can use both Firebase Realtime Database and Cloud Firestore in your app, and leverage each database solution's benefits to fit your needs. For example, you might want to leverage Realtime Database's support for presence, as outlined in Build Presence in Cloud Firestore.
Cloud Firestore is Firebase's newest database for mobile app development. It builds on the successes of the Realtime Database with a new, more intuitive data model. Cloud Firestore also features richer, faster queries and scales further than the Realtime Database. Realtime Database is Firebase's original database.
Your initial approach is right, but it may be less verbose to assign the document reference to a variable like so:
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 } });
Reference: Get a document
Please check following code. It may help you.
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()); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With