База данных Firebase Realtime - Найти и обновить - PullRequest
0 голосов
/ 07 апреля 2019

Я тестирую базу данных Firebase в режиме реального времени, и мне очень тяжело. Сначала я хотел бы узнать, каков наилучший подход к поиску записи, и обновить ее другой информацией. Допустим, у меня есть пользователь, и с помощью почтового запроса я хочу изменить его имя.

Я пытался:

var userRef = admin.database().ref('users');
var email = req.body.email;
var name = req.body.name;
userRef.equalTo(email).update({name: name});

Попробуйте следовать официальной документации, но безуспешно.

Моя база данных:

users
   -Lbq98URniAej2TkWBhG
      email: "pepe@san.com"
      name: "Pepe"
-Lbq9GC1A131De-iumI0
      email: "pipa@boca.com"
      name: "Pipa"

Кроме того, помните, что я заранее не знаю uid, поэтому мне нужно посмотреть на дочерние данные.

1 Ответ

1 голос
/ 07 апреля 2019

Сначала я хотел бы узнать, каков наилучший подход к поиску записи, и обновить ее другой информацией.

Я не уверен, является ли это лучшим подходом или нет, нодля вашей ситуации я бы настроил свою базу данных таким образом

users
     -- unique user id - 1      
        -- name
        -- email
        -- posts
           -- unique post id
     -- unique user id - 2      
        -- name
        -- email
        -- posts
           -- unique post id
// and so on

Тогда я бы использовал идентификатор пользователя для изменения имени следующим образом.

var database = admin.database();
var name = req.body.name;
var uid = req.body.uid;
var userRef = database.ref('users/' + uid);

userRef.update({name : name})
    .then(() => {
        console.log("Update Successfull")
    })
    .catch(error => {
        console.log(error);
    });

Я предполагаю, что ваша база данных организованатаким образом:

users
     -- pxTYaszxcsauniqueId1
        -- email    
        -- name
        -- posts
           -- unique post id
     -- abcdeFFFaKauniqueId2     
        -- email
        -- name
        -- posts
           -- unique post id
// and so on

В этом случае я бы использовал электронную почту, чтобы найти документ, делая что-то вроде этого:

// Get a reference to the database service
var database = admin.database();
var name = req.body.name;
var email = req.body.email;

var ref = database.ref("users").orderByChild("email").equalTo(email);

ref.once("value").then(function(snapshot) {
    snapshot.forEach(function(childSnapshot) {

      childSnapshot.ref.update({
        "name" : name
      }).then(function() {
        console.log("Success")
      });

      // Cancel enumeration
      return true;
  });
})

Опять же, это предполагает, что вы организовалибаза данных.Если вы организуете БД другим способом, приведенный выше код не будет работать.Если он отличается, пожалуйста, добавьте способ, которым вы организовали БД, в вопросе, который вы опубликовали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...