Node.js Mongoose删除文档字段而不是整个文档

Node.js Mongoose删除文档字段而不是整个文档,node.js,mongoose,Node.js,Mongoose,查询不是删除otp属性,而是删除整个文档 app.post("/verify/:id", async(req, res) => { var User = await Model.findOne({ _id: req.params.id, otp:req.body.otp }); Model.deleteOne({ otp: User.otp }, (err, res) => { if (err) console.log

查询不是删除otp属性,而是删除整个文档

 app.post("/verify/:id", async(req, res) => {

var User = await Model.findOne({ _id: req.params.id, otp:req.body.otp });

Model.deleteOne({ otp: User.otp }, (err, res) => {
                    if (err) console.log(err)
                    else console.log("succesful");
                })
})
模式。我想在验证后删除otp

const LoginSchema = new mongoose.Schema({
    email: String,
    password:String,
    verified: Boolean,
    otp:Number
});

const Model = mongoose.model("Users", LoginSchema);

在Post请求中查询

 app.post("/verify/:id", async(req, res) => {

var User = await Model.findOne({ _id: req.params.id, otp:req.body.otp });

Model.deleteOne({ otp: User.otp }, (err, res) => {
                    if (err) console.log(err)
                    else console.log("succesful");
                })
})

这是因为您在使用“deleteOne”时删除了文档。您需要
$unset
otp属性

试试这个:

Model.findOneAndUpdate({ otp: User.otp }, {$unset: {otp: 1 }},(err, res) => {
                    if (err) console.log(err)
                    else console.log("succesful");
                })
})

这实际上是很短的代码,问题出在这里。我跳过了所有不相关的内容。看看删除字段
otp
的原因是什么?例如,仅仅将其设置为
null
false
,还不够吗?我实际上是在更新它,它将为null。但后来我意识到,我将来可能需要这个概念,但对象不同。
{otp:1}
这个值是什么意思?如果没有影响,您可以阅读更多内容: