lonewolf
lonewolf

Reputation: 71

Firestore: Unable to fetch document from query - doc.data is not a function

here usersList contains the list of username of people and androidNotificationToken is the field in the document of the user which contains the token for sending the notification.

const registrationTokens=[];
const indexOfSender=usersList.indexOf(senderUsername); // to remove the name of person sending message
let removedUsername=usersList.splice(indexOfSender,1);

usersList.forEach(async(element)=>{
                    const userRef = admin.firestore().collection('users').where("username","==",element);
                    const doc = await userRef.get();
                    registrationTokens.push(doc.data().androidNotificationToken);
                });
The error on running the cloud computing am receiving is :-

TypeError: doc.data is not a function
    at usersList.forEach (/workspace/index.js:191:37)
    at process._tickCallback (internal/process/next_tick.js:68:7)

Upvotes: 0

Views: 92

Answers (1)

Doug Stevenson
Doug Stevenson

Reputation: 317467

userRef.get() is going to return a QuerySnapshot (not a DocumentSnapshot) object that can contain 0 or more documents matched from the query. Use the API provided by QuerySnapshot to find the resulting documents, even if you are expecting only one document.

If you are expecting just one document from the query, you should at least verify that you got one before indexing into the result set.

const query = admin.firestore().collection('users').where("username","==",element);
const qsnapshot = await query.get();
if (qsnapshot.docs.length > 0) {
    const doc = qsnapshot.docs[0];
    const data = doc.data();
}
else {
    // decide what you want to do if the query returns nothing
}

Upvotes: 1

Related Questions