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

我正在尝试更新我的文档以删除我正在前端进一步测试的一些字段,我用以下方法删除了这些字段:


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是创建一个重复的文档,然后抑制旧的文档或类似的东西。而不是仅仅清空文档并用新数据填充它。


慕森王
浏览 108回答 1
1回答

莫回无

如果我理解得很好,您想删除一些字段并用新字段更新文档。所以我认为更好的方法是使用$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 }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript