Stewart Ellis
Stewart Ellis

Reputation: 1361

How to check if a cloud firestore document exists when using realtime updates

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?

Upvotes: 136

Views: 162952

Answers (5)

Eduard
Eduard

Reputation: 3576

Please note that in Firebase v9 (Modular SDK) exists is a method, not a property (which would give you falsy results all the time), as per the docs.

Upvotes: 3

Dwipal Parmar
Dwipal Parmar

Reputation: 292

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());
   }

Upvotes: 19

dealdrey
dealdrey

Reputation: 49

I know its late, but it's actually snapshot.empty not snapshot.exists . snapshot.empty checks if a doc exists and returns accordingly. happy coding 😊

Upvotes: 4

Nowdeen
Nowdeen

Reputation: 1450

In case you are using PHP-Firestore integration, like me, write something like this:

$firestore = new FirestoreClient();
$document = $firestore->document('users/john');
$snapshot = $document->snapshot();

if ($snapshot->exists()) {
   echo "John is there!";
}

Enjoy! o/

Upvotes: 1

Excellence Ilesanmi
Excellence Ilesanmi

Reputation: 3535

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

Upvotes: 210

Related Questions