javascript - 如何将多个 map 对象(JSON)添加到cloud-firestore数据库?

标签 javascript firebase express google-cloud-firestore http-post

我有一个函数可以将一个 JSON 设置到我的 Cloud Firestore 数据库:

app.post('/api/add/collection/:collection_id/permission/:permission_id', (req, res) => {
(async () => {
    try {
        await db.collection(req.params.collection_id)
            .doc(req.params.permission_id)
            .set({
                [req.body.id]: {
                    name: req.body.name,
                    email: req.body.email,
                    phone_number: req.body.phone_number
                }
            }, { merge: true}
            );

        return res.status(200).send('OK');
    } catch (error) {
        console.log(error);
        return res.status(500).send('ERROR' + error);
    }
})();
});

为了调用此函数,我将 JSON 正文传递给 POST 请求:

https://.../app/api/add/collection/USER_ID/permission/PERMISSION_id

{
    "id": 45,
    "name": "Stack",
    "email": "stack@overflow.com",
    "phone_number": "+48 111 222 333"
}

一切正常,此请求将此 JSON 设置为映射,其中 id 作为键,值作为 nameemailphone_number。但我想在一个请求中传递多个 JSON,以将多个 map 对象添加到我的 NoSQL 文档中,例如:

[
    {
        "id": 45,
        "name": "Stack",
        "email": "stack@overflow.com",
        "phone_number": "+48 111 222 333"
    },
    {
        "id": 46,
        "name": "Stack2",
        "email": "stack2@overflow.com",
        "phone_number": "+48 222 222 333"
    },
    {
        "id": 47,
        "name": "Stack3",
        "email": "stack3@overflow.com",
        "phone_number": "+48 333 222 333"
    }
]

如何修改我的 firebase 函数来实现此目的?

最佳答案

由于您有一个对象数组,因此您需要循环该数组,然后为每个对象创建一个文档。由于您需要等到所有文档都创建完毕,因此可以使用 Promise.all()。

类似这样的事情:

try {
    await Promise.all(req.body.map((object) => {
        return db.collection(req.params.collection_id)
          .doc(req.params.permission_id)
          .set({
            [object.id]: {
                name: object.name,
                email: object.email,
                phone_number: object.phone_number
            }
          }, { merge: true});
    });
    return res.status(200).send('OK');
} catch (error) {
    console.log(error);
    return res.status(500).send('ERROR' + error);
}

关于javascript - 如何将多个 map 对象(JSON)添加到cloud-firestore数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58891568/

相关文章:

javascript - 一旦计算出第一行值,就启用表中的所有其他行

angular - 如何测试与 Firebase 交互的服务?

objective-c - 已配置默认应用

android - 我该如何解决? `Failed to resolve: com.crashlytics.sdk.android:crashlytics:com.crashlytics.tools.gradle`

javascript - ExpressJS 错误处理不起作用

javascript - rxjs 有条件地先于另一个可观察值触发一个可观察值

javascript - Webpack 4 从输出散列中排除条目

node.js + express 3 + socket.io = 发送后无法设置 header

javascript - Express中的Routes文件夹

javascript - JavaScript闭包如何工作?