typescript - Firebase实时数据库如何添加具有自动ID的孩子
问题描述
我正在尝试使用 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/');
.
任何的想法?
解决方案
如果我理解正确,您希望steps
并inputs
使用实时数据库键而不是数字索引进行键控?您始终可以通过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);
推荐阅读
- reactjs - React Native:[Expo] 从相机胶卷拍摄的图像中捕获主要颜色的库?
- postgresql - 提高父表中的 PostgreSQL SELECT 性能(继承)
- c# - 从 Exchange 而不是 Outlook 获取联系人
- javascript - 尝试将 reCatchpha 添加到项目时出现 403 错误
- unity3d - 如何在 Unity 中生成不重复的随机数
- java - Android Studio 中的 Google Talkback 构建
- c++ - 我在使用 Eigen translate() 和 rotate() 时遇到问题,并且没有按预期运行
- octave - 如何使用 Octave 围绕一组点拟合曲线?
- linux - 如何从 RHEL 7 中删除 gcc 7.3?
- acpi - 如何获取 ACPI 设备的电源状态?