Javascript Firebase数据库替换用户id云功能

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

我正在从事一个具有Firebase和云功能的项目,但我在这里遇到了困难:

我有一个具有相关id的用户。 该id(我们称之为“oldID”)用于数据库的其他节点。 出于某些原因,我需要更改该id并用另一个id替换它

我想使用云函数来实现这一点,因为我知道Firebase不支持此“全部替换”功能。顺便说一句,我找不到一种方法来遍历所有可能的节点并查找特定的oldID

你们有什么建议吗

谢谢, 公关

示例

用户--

团体--

然后,在某个时刻,我需要将用户1的id(id1)更改为另一个id(比如newid1)。我需要的是这个例子来改变:

用户--

团体--


阅读整个用户集合
。其中('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)
 })