Javascript Firebase数据库替换用户id云功能
我正在从事一个具有Firebase和云功能的项目,但我在这里遇到了困难: 我有一个具有相关id的用户。 该id(我们称之为“oldID”)用于数据库的其他节点。 出于某些原因,我需要更改该id并用另一个id替换它 我想使用云函数来实现这一点,因为我知道Firebase不支持此“全部替换”功能。顺便说一句,我找不到一种方法来遍历所有可能的节点并查找特定的oldID 你们有什么建议吗 谢谢, 公关 示例 用户-- 团体-- 然后,在某个时刻,我需要将用户1的id(id1)更改为另一个id(比如newid1)。我需要的是这个例子来改变: 用户-- 团体--Javascript Firebase数据库替换用户id云功能,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,我正在从事一个具有Firebase和云功能的项目,但我在这里遇到了困难: 我有一个具有相关id的用户。 该id(我们称之为“oldID”)用于数据库的其他节点。 出于某些原因,我需要更改该id并用另一个id替换它 我想使用云函数来实现这一点,因为我知道Firebase不支持此“全部替换”功能。顺便说一句,我找不到一种方法来遍历所有可能的节点并查找特定的oldID 你们有什么建议吗 谢谢, 公关 示例 用户-- 团体-- 然后,在某个时刻,我需要将用户1的id(id1)更改为另一个id(比如new
阅读整个用户集合
。其中('oldID','==',)
迭代每个文档,将编辑的值添加到批处理中删除它,并使用其副本创建一个新的文档,您需要使用Object.assign()或更好的扩展运算符制作深度副本:
let batch = firestore.batch()
firebase.firestore().collection('users').get().then(snap => {
snap.forEach(doc => {
let newID = // I don't know where you're getting this, your <<oldID>> is doc.id
let userData = { ... doc.data() }
batch.delete(doc.ref)
batch.set(firestore.collection('users').doc(newID), userData)
})
return batch.commit()
}).then(outcome => {
console.log(outcome)
res.end()
}).catch(e => {
console.error(e)
})
let batch=firestore.batch()
firebase.firestore().collection('users').get().then(snap=>{
snap.forEach(doc=>{
让newID=//我不知道你从哪里得到这个,你的是doc.id
让userData={…doc.data()}
批处理删除(doc.ref)
batch.set(firestore.collection('users').doc(newID),userData)
})
返回batch.commit()
})。然后(结果=>{
console.log(结果)
决议结束()
}).catch(e=>{
控制台错误(e)
})
如果这是一次性编辑,您需要执行。我建议您导出整个数据库:
在顶部右键单击“导出JSON”
下载数据库后,只需在编辑器中打开它,并对旧/新UID执行查找/替换,然后:
在顶部右键单击“导入JSON”
您好,谢谢您的回复,但我正在寻找一种通过编程实现的方法,因为不幸的是,这不是一次性编辑,但我需要多次。您好,Davide,我明白您的意思,但我想我可能解释了我的问题。用户id实际上是我要更改的id,我无法执行“where”功能,因为我不知道该值,我要替换密钥
group1 --
id1:email1
id2:email2
group2--
newid1 --
//user1 data
id2 --
//user2 data
group1 --
newid1:email1
id2:email2
group2--
let batch = firestore.batch()
firebase.firestore().collection('users').get().then(snap => {
snap.forEach(doc => {
let newID = // I don't know where you're getting this, your <<oldID>> is doc.id
let userData = { ... doc.data() }
batch.delete(doc.ref)
batch.set(firestore.collection('users').doc(newID), userData)
})
return batch.commit()
}).then(outcome => {
console.log(outcome)
res.end()
}).catch(e => {
console.error(e)
})