Firestore字段缺失/未定义时,如何实现FieldValue.increment以0增量更新?
问题
我正在构建以Firebase为后端的Next.js应用,使用Firebase云函数的onCreate触发器传递增量数值,更新Firestore字段。
数据结构示例:
{ "docId": "a4wwdslidinwle", "metaData": [ { "data": "age", "count": 1 }, { "data": "skill", "count": 3 } ], "phoneNumber": "0800182712", "uid": "j10wmCUhUWPxYJpIElBxmFAEI6l1" }
当前更新字段的代码:
// INCREMENT FIRESTORE FIELD VALUE var userData = admin.firestore().collection("user") .doc(data.uid).update({ age: admin.firestore.FieldValue.increment(dataObject.age), skill: admin.firestore.FieldValue.increment(dataObject.skill), starRating: admin.firestore.FieldValue.increment(dataObject.starRating) })
遇到的问题:当文档创建时starRating字段缺失/未定义时,云函数报错,提示FieldValue.increment()未传入有效数字;但starRating有值时更新正常。想知道能否在字段缺失/未定义时以0为增量更新?
解决方法
可以实现这个需求,核心是确保传给FieldValue.increment()的始终是有效数字。你可以通过空值合并操作符(??)处理字段未定义的情况,直接传入0作为默认增量:
// INCREMENT FIRESTORE FIELD VALUE const updatePayload = { age: admin.firestore.FieldValue.increment(dataObject.age ?? 0), skill: admin.firestore.FieldValue.increment(dataObject.skill ?? 0), starRating: admin.firestore.FieldValue.increment(dataObject.starRating ?? 0) }; // 注意添加await确保异步操作完成 const userData = await admin.firestore().collection("user") .doc(data.uid).update(updatePayload);
额外说明
??操作符会在左侧值为null或undefined时返回右侧的0,完全适配字段缺失的场景;- 如果你的运行环境不支持空值合并操作符,也可以用三元表达式替代:
dataObject.starRating !== undefined ? dataObject.starRating : 0; - 必须添加
await,否则会出现未处理的Promise,可能导致云函数提前终止。
内容的提问来源于stack exchange,提问作者Sky Lurk
相关产品推荐
相关产品推荐

