Firebase数据库替换用户ID云功能

时间:2018-07-02 21:47:02

标签: javascript firebase firebase-realtime-database google-cloud-functions

我正在开发一个具有Firebase和云功能的项目,但是我在这里苦苦挣扎:

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

我想使用云功能来执行此操作,因为我知道Firebase不支持此“全部替换”功能。顺便说一句,我找不到在所有可能的节点上循环并查找该特定oldID的方法。

你们有什么建议吗?

谢谢, 公关

示例

用户-

  id1 --
      //user1 data
  id2 --
      //user2 data

组-

  group1 --
      id1:email1
      id2:email2
  group2--

然后,在某个时候,我需要将用户1(id1)的ID更改为另一个ID(比如说newid1)。我需要在以下示例中进行更改:

用户-

  newid1 --
      //user1 data
  id2 --
      //user2 data

组-

  group1 --
      newid1:email1
      id2:email2
  group2--

2 个答案:

答案 0 :(得分:0)

读取整个用户集合 .where('oldID', '==', <YOUR-VALUE>) 遍历每个文档并将修改后的值添加到批处理中删除它,并使用其副本创建一个新值,则需要使用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)
 })

答案 1 :(得分:0)

如果这是一次性编辑,则需要执行。我建议您导出整个数据库:

desired <- merge(df1, df2, by = "ID", all.x = T) desired$letters <- ifelse(is.na(desired$letters2), desired$letters, desired$letters2) desired$letters2 <- NULL

下载数据库后,只需在编辑器中将其打开,然后执行查找/替换旧/新uid的操作即可

On the top right click 'Export JSON'