检查body参数是否不为null,并在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和anything2(将为null。

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

如果我正确理解了你的问题,你可以在$set阶段使用body对象来实现你的需求。

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

作为一个例子,请检查这个例子,其中只有name字段被更新,其余字段没有设置为null。

另一个示例,更新了2个字段和3个字段。

您可以看到如何仅将字段更新为$set中的对象。

因此,您只需要将接收到的对象传递到查询中。类似这样的东西:

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

相关内容

最新更新