Firestore:如何在嵌套结构中添加新成员而不覆盖原有数据?
如何在Firestore的channel集合中添加成员而不覆盖原有数据?
你的channel集合结构如下:
channel channel1 : { name: 'Busy Guys', members: { user1 : { name: 'Allan', photo: 'a.photo.url' }, user2 : { name: 'Pogi', photo: 'a.photo.url' } } }
你当前的更新代码会直接覆盖整个members对象:
channelReference.doc(channelId).update({ 'members': {'name': 'Arnold', 'photo' : 'http.photo.url'} })
要实现不覆盖原有成员的前提下添加新成员,需要使用Firestore的点路径语法,直接指定要新增的子字段,而不是替换整个members对象:
方法1:指定固定用户ID
如果已经确定新成员的ID(比如user3),可以这样写:
channelReference.doc(channelId).update({ 'members.user3': { name: 'Arnold', photo: 'http.photo.url' } })
方法2:生成唯一用户ID
如果需要自动生成唯一的用户ID,可以利用Firestore的文档ID生成器:
// 生成唯一ID const newUserId = channelReference.firestore.collection('users').doc().id; // 用模板字符串拼接路径 channelReference.doc(channelId).update({ [`members.${newUserId}`]: { name: 'Arnold', photo: 'http.photo.url' } })
原理:Firestore的update方法中,使用点路径(members.[用户ID])只会更新该路径对应的子属性,不会影响members下的其他已有成员,从而实现增量添加。
内容的提问来源于stack exchange,提问作者Allan Macatingrao
相关产品推荐
相关产品推荐

