I am performing a simple operation where in im trying to increment the count of a field. the code is below:
import * as firebase from 'firebase';
const DocumentRef = db.doc(`pages/${request.params.pageId}`);
const increment = firebase.firestore.FieldValue.increment(1);
DocumentRef
.get()
.then(function (documentSnapshot) {
if(!documentSnapshot.exists){
return response.status(404).json({"message":"page not found"})
}else{
return db.collection(`comments`).add(newComment)
}
})
.then(()=>{
return DocumentRef.update({nComments: increment})
})
.then(() => {
response.status(200).json(newComment);
})
.catch((error) => {
console.log(error)
return response.status(500).json({message:error.code});
})
ending up in following error:
Error: Update() requires either a single JavaScript object or an alternating list of field/value pairs that can be followed by an optional precondition. Value for argument "dataOrField" is not a valid Firestore document. Couldn't serialize object of type "FieldValueDelegate" (found in field "nComments"). Firestore doesn't support JavaScript objects with custom prototypes (i.e. objects that were created via the "new" operator).
at WriteBatch.update (/srv/node_modules/@google-cloud/firestore/build/src/write-batch.js:374:23)
at DocumentReference.update (/srv/node_modules/@google-cloud/firestore/build/src/reference.js:377:14)
at screamDocumentRef.get.then.then (/srv/lib/handlers/screams.js:105:34)
at <anonymous>
The message is:
Update() requires either a single JavaScript object or an alternating list of field/value pairs that can be followed by an optional precondition. Value for argument "dataOrField" is not a valid Firestore document. Couldn't serialize object of type "FieldValueDelegate" (found in field "nComments"). Firestore doesn't support JavaScript objects with custom prototypes (i.e. objects that were created via the "new" operator).
this error happens only when I add this "then" chain:
.then(()=>{
return DocumentRef.update({nComments: increment})
})
I do not understand why.
only relevant part of the schema, I've 2 collections.
collection: pages(nComments, body, etc) id: pageId
collection: comments(pageId, etc) id: commentId
when new comment document is added in comments collection, Im updating the count in pages collections document whose pageId is in comment documents pageId field.
nComments and pageId are fields.