Firebase Cloud Firestore如何使用变量作为字段名存储数据?
如何在Firebase Cloud Firestore中使用变量作为字段名
当然可以实现这个需求!你当前的函数思路完全正确,只是在JavaScript对象的语法上需要做一点调整——直接在set()的对象字面量里用模板字符串作为键的写法在早期JS里不支持,但ES6的计算属性名正好能解决这个问题。
正确的实现方式
你只需要把字段名用方括号[]包裹起来,就能直接用变量作为Firestore文档的字段名了,修改后的函数如下:
setFavorite(channelID: string, favorite: boolean): Promise<void> { return this.fireStore.firestore.doc(`favorites/${mycustomID}`) .set({ [channelID]: favorite }, { merge: true }); }
这里有两个关键点:
- 用
[channelID]代替原来的${channelID},这是ES6计算属性名的语法,它会把变量channelID的值作为对象的键。 - 我添加了
{ merge: true }选项,这样如果文档已经存在,只会更新指定的字段而不会覆盖整个文档——如果你希望每次调用都完全替换文档,可以去掉这个选项。
调用示例
比如你要存储Madonna: true、Queen: false、MJackson: true这三组数据,只需要分三次调用这个函数:
await setFavorite('Madonna', true); await setFavorite('Queen', false); await setFavorite('MJackson', true);
执行后,favorites/${mycustomID}这个文档里就会有你想要的字段和对应值了。
额外说明
如果想一次性设置多个字段,也可以用同样的语法先构建对象:
const favorites = { ['Madonna']: true, ['Queen']: false, ['MJackson']: true }; // 或者更简洁的字面量写法 const favorites = { Madonna: true, Queen: false, MJackson: true }; this.fireStore.firestore.doc(`favorites/${mycustomID}`).set(favorites);
这样就能轻松实现用变量动态指定Firestore字段名的需求啦!
内容的提问来源于stack exchange,提问作者NorthFred
相关产品推荐
相关产品推荐

