如何在Firestore文档的Map中添加或修改特定值?
Firestore Map字段的部分更新方法
你遇到的问题是因为直接给inPack字段赋值新对象,导致整个Map被覆盖。Firestore的update()方法支持通过点符号定位Map的子字段,实现只修改或添加Map内的特定键值对,而不覆盖整个Map。
1. 向Map中添加新键值对
使用'inPack.新键名'作为字段路径,直接赋值即可新增:
db .collection('GearLockerItems') .doc(doc.reference.id) .update({ 'inPack.newPackID': true // 新增newPackID键到inPack Map中 });
2. 修改Map中已有键的值
同样用点符号定位到目标键,修改对应值:
db .collection('GearLockerItems') .doc(doc.reference.id) .update({ 'inPack.packID': true // 修改inPack中packID的值为true });
动态键名的处理
如果键名是变量(比如packId),可以用ES6计算属性名拼接路径:
const packId = 'dynamicPackID'; db .collection('GearLockerItems') .doc(doc.reference.id) .update({ [`inPack.${packId}`]: false // 动态指定Map的键 });
为什么原来的代码会覆盖?
你之前的写法'inPack': {packID: false}是直接替换整个inPack字段,Firestore会把原有的Map完全替换成新的对象,自然会丢失原有键值对。
Firestore中的Set():
要创建或覆盖单个文档,请使用set()方法:
Firestore中的Update():
要更新文档的部分字段而不覆盖整个文档,请使用update()方法:
内容的提问来源于stack exchange,提问作者Ten Digit Grid
相关产品推荐
相关产品推荐

