mongodb 将值更改为undefined mongoose findOneAndUpdate

dgiusagp  于 2023-06-05  发布在  Go
关注(0)|答案(2)|浏览(154)

我正在尝试根据用户输入更新模式值。
我的schema是:

({
  name: {
    type: String,
    required: true,
  },
  color: {
    type: String,
  },
  createdAt: {
    type: Date,
    default: Date.now,
  },
});

name字段是必需的,但color字段是可选的。假设用户创建了一个文档:

{
    "name": "Blue",
    "color": "#20387d"
}

然后,他可以编辑没有提供color值的同一文档:

{
     "name": "Blue"
 }

我的更新代码是:

const { name, color} = req.body;
  const document = await Model.findOneAndUpdate(
    {
      _id: req.params.id,
    },
    { $set: { name, color }},
    { new: true }
  );

这应该会将我的MongoDB中的color值更新为undefined。但是,color保持与最初提供的相同,而name更新。我希望color更改为undefined,如果它不是由用户提供的。我该怎么做?

q0qdq0h2

q0qdq0h21#

由于您不想使用$unset或将该值设置为其他值,因此只剩下一种方法。
使用findById/findOne获取该文档,然后修改其内容,然后保存。

const document = await Model.findById(
    req.params.id,
    { name: 1, color: 1 }
  );
  //..
  document.color = req.body.color || undefined
  //..
  await document.save()

上面的代码工作,因为mongoose检测变化。

oxcyiej7

oxcyiej72#

正如@bogdanoff在注解中指出的那样,您可以将该值设置为null,而不是undefined

相关问题