【问题标题】:Firebase Realtime Database How to add child with automatic IDFirebase实时数据库如何添加具有自动ID的孩子
【发布时间】:2021-03-17 02:37:10
【问题描述】:

我正在尝试使用 Firebase 实时数据库制作一个 Restful API。一旦我像这样的 JSON 从前端发送数据:

{
    "title": "Test title",
    "description": "Another title 2",
    "author": "my@email.com",
    "steps": [
        {
            "title": "Step 1",
            "subtitle": "Step 1 subtitle",
            "inputs": [
                {
                    "inputId": "123-abc",
                    "label": "Input step 1"
                }
            ]
            
        }
    ]
}

我的“问题”是我不确定如何将具有给定 ID 的子对象添加到主对象,例如第一个对象。

这是我当前保存对象的方式:

const data: any = req.body;
const ref = database.ref('/forms').push();
ref.set(data);

这就是在 Firebase 实时数据库中创建的内容:

因此,您可以看到 ID 为 -MNl6bPhPg6BNnM9NKEy 及以下的主对象,有两个 ID 为 0 的子对象(步骤和输入)。所以,我的问题是,是否有适当的方法可以自动执行此操作,或者我应该手动创建对象,然后使用const formRef = database.ref('/forms/-MNl6bPhPg6BNnM9NKEy/'); 之类的内容添加子对象。

有什么想法吗?

【问题讨论】:

    标签: typescript firebase rest firebase-realtime-database postman


    【解决方案1】:

    如果我理解正确,您希望使用实时数据库键而不是数字索引来键入 stepsinputs?您始终可以通过ref.push().key 获得新的自动密钥。所以你可以这样做:

    function arrayToKeyedObject(arr) {
      const out = {};
      for (const val of arr) {
        out[database.ref().push().key] = val;
      }
      return out;
    }
    
    const data: any = req.body;
    const ref = database.ref('/forms').push();
    
    data.steps.forEach(step => {
      step.inputs = arrayToKeyedObject(step.inputs);
    });
    
    data.steps = arrayToKeyedObject(step.inputs);
    
    ref.set(data);
    

    【讨论】:

      猜你喜欢
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      • 2021-12-11
      相关资源
      最近更新 更多