检查 body 参数是否不为空并在 MongoDB 上更新

泰雷兹

我正在尝试使用 NodeJS (NextJS) 更新 MongoDB 中的文档。我目前的代码是:

import connect from "../../util/mongodb";

async function api(req, res) {
    if (req.method === "POST") {
        const { id } = req.body;
        const { name } = req.body;
        const { email} = req.body;
        const { anything1 } = req.body;
        const { anything2 } = req.body;

        if (!id) {
            res.status(400).json({ "error": "missing id param" });
            return;
        }

        const { db } = await connect();
        const update = await db.collection("records_collection").findOneAndUpdate(
            { id },
            {
                $set: {
                    name,
                    email,
                    anything1,
                    anything2
                }
            },
            { returnOriginal: false }
        );

        res.status(200).json(update);
    } else {
        res.status(400).json({ "error": "wrong request method" });
    }
}

export default api;

一切正常。但我只想将 ID 请求为必填项,对于其他信息,请保留可选。在此代码中,例如传递 id 和 name,其他三个字段(email、anything1 和 nothing2)在文档中将为空。

是否可以在不需要所有文档信息的情况下实现更新并在正文字段为空时忽略?(作为 NodeJS 和 MongoDB 的初学者,我现在想到的唯一方法就是用很多 if 来包围它……)

杰夫

如果我正确理解了您的问题,您可以在$set舞台上使用 body 对象来实现您的要求

如果对象中存在不存在的字段,mongo 将不会更新该字段。

作为示例,请检查示例,其中仅name更新字段,其余字段未设置为空。

另一个例子有2 个字段更新3 个字段

您可以在$set.

所以你只需要将接收到的对象传递到查询中。像这样的东西:

const update = await db.collection("records_collection").findOneAndUpdate(
            { id },
            {
                $set: req.body
            },
            { returnOriginal: false }
        );

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章