База данных Firebase заменяет идентификатор пользователя облачной функции - PullRequest
0 голосов
/ 03 июля 2018

Я работаю над проектом с Firebase и облачными функциями, но я борюсь здесь:

У меня есть пользователь со связанным идентификатором. Этот идентификатор (назовем его 'oldID') используется в других узлах базы данных. По некоторым причинам мне нужно изменить этот идентификатор и заменить его другим.

Я хочу использовать облачную функцию для этого, потому что я знаю, что эта функция «заменить все» не поддерживается Firebase. Кстати, я не могу найти способ циклически перебирать все возможные узлы и искать этот конкретный oldID.

Ребята, у вас есть предложения?

Спасибо, PR

Пример

пользователи -

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

групп -

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

Затем в какой-то момент мне нужно изменить идентификатор пользователя 1 (id1) на другой идентификатор (скажем, newid1). Что мне нужно, так это изменить пример:

пользователи -

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

групп -

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

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Если это однократное редактирование, вам нужно это сделать. Я бы порекомендовал экспортировать вам всю базу данных:

On the top right click 'Export JSON'

После того, как вы загрузили базу данных, просто откройте ее в редакторе и выполните поиск / замену старых / новых идентификаторов:

On the top right click 'Import JSON'

0 голосов
/ 03 июля 2018

Прочитать всю коллекцию пользователей .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)
 })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...