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 (ie 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.
You're probably using admin
namespace to do the update while using increment
from the firebase
namespace. Try changing your increment statement to:
import * as admin from 'firebase-admin';
const increment = admin.firestore.FieldValue.increment(1);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.