32

The issue

I'm trying to retrieve the document reference from a query. My code returns undefined. I can get the path by extracting various parts of documentSnapshot.ref, but this isn't straightforward.

What I'd like to return is a reference which I can then later use to .update the document, without having to specify the collection and use documentSnapshot.id

The documentation for the path property is here

My code

const db = admin.firestore();

return db.collection('myCollection').get().then(querySnapshot => {
  querySnapshot.forEach(documentSnapshot => {
    console.log(`documentReference.id   = ${documentSnapshot.id}`);
    console.log(`documentReference.path = ${documentSnapshot.path}`);
    // console.log(`documentReference.ref = ${JSON.stringify(documentSnapshot.ref)}`);
  });
});

Output

documentReference.id   = Jez7R1GAHiR9nbjS3CQ6
documentReference.path = undefined
documentReference.id   = skMmxxUIFXPyVa7Ic7Yp
documentReference.path = undefined
Jason Berryman
  • 4,760
  • 1
  • 26
  • 42

1 Answers1

41

In your code, documentSnapshot is an object of type DocumentSnapshot. It looks like you're assuming that it's an object of type DocumentReference. A the purpose of a reference is to locate a document. The purpose of a snapshot is to receive the contents of a document after it's been queried - they're definitely not the same thing. A DocumentSnapshot doesn't have a path property.

If you want the DocumentReference of a document that was fetched in a DocumentSnapshot, you can use the ref in the snapshot. Then you can get a hold of the ref's path property:

documentSnapshot.ref.path
Doug Stevenson
  • 297,357
  • 32
  • 422
  • 441
  • 2
    Hey Doug. Thanks for that. I looked at both the DocumentSnapshot and DocumentReference documentation and clearly had a moment of ignorance. It's all working now. I've used documentSnapshot.ref.path before, but couldn't find where I'd used it. – Jason Berryman Feb 22 '18 at 18:26
  • In python, it's `reference` instead of `ref`. – Rivers Cuomo Nov 07 '21 at 14:45
  • I couldn't find this in the docs. So I don't need to use the data() method, I can just use .ref? – satchel Jan 07 '23 at 01:27