【问题标题】:Firebase Realtime Database - Find and UpdateFirebase 实时数据库 - 查找和更新
【发布时间】:2019-04-08 14:25:23
【问题描述】:

我正在测试 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,所以我必须查看子数据。

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    首先我想知道找到 记录并使用其他信息进行更新。

    我不确定这是否是最好的方法,但对于您的情况,我会以这种方式设置我的数据库

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

    然后我会使用用户 id 来更改名称。

    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;
      });
    })
    

    再次假设您组织数据库的方式。如果您以不同的方式组织数据库,则上述代码将不起作用。如果它不同,请在您发布的问题中添加您组织数据库的方式。

    【讨论】:

    • 感谢您的回复。问题是,我事先不知道我的 uid 是什么,所以我必须查看每个孩子。我已经用数据库结构更新了我的帖子。
    • 嗨@EzequielRamiro 我已经更新了我的答案,以便它可以根据您的数据库结构工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多