为了账号安全,请及时绑定邮箱和手机立即绑定

Mongoose 更新完全替换以前的文档

Mongoose 更新完全替换以前的文档

慕森王 2023-07-20 10:24:56
我正在尝试更新我的文档以删除我正在前端进一步测试的一些字段,我用以下方法删除了这些字段:delete myObject.myField;因此,当我在猫鼬之前查看它时,findByIdAndUpdate它确实没有这些字段,然后我尝试像这样更新:Journee.findByIdAndUpdate(req.params.id, journee, {new: true, overwrite: true, runValidators: true, context: 'query'}, )            .then(() => {                res.status(200).json()            })            .catch(err => {                res.status(400).json({ err })            })但是当我像这样使用覆盖选项时,它会触发我的唯一验证器并返回错误。我不明白如何实现我的目标,在我看来,这mongo是创建一个重复的文档,然后抑制旧的文档或类似的东西。而不是仅仅清空文档并用新数据填充它。
查看完整描述

1 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

如果我理解得很好,您想删除一些字段并用新字段更新文档。

所以我认为更好的方法是使用$unset

您可以从$unset文档中删除任何字段。

这里有一个例子

通过这样的查询:

db.collection.update({

  "id": 1

},

{

  "$unset": {

    "field1": "",

    "field3": ""

  }

})

您可以找到您想要的文档(例如使用id或任何您想要的)。然后$unset根据需要删除字段。


使用猫鼬是一样的:


var update = await model.updateOne({

  "id": 1

},

{

  "$unset": {

    "field1": "",

    "field3": ""

  }

})

console.log(update)

显示输出:


{ n: 1, nModified: 1, ok: 1 }


查看完整回答
反对 回复 2023-07-20
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信