【问题标题】:NodeJS Mongoose updateOne giving no match every timeNodeJS Mongoose updateOne 每次都不匹配
【发布时间】:2020-01-28 18:50:11
【问题描述】:

我正在尝试使用 updateOne 方法使用 mongoose 更新 mongo 中的文档:

const updateResult = await UserModel.updateOne({
    _id: mongoose.Types.ObjectId(userId)
}, {
    $set: {
        a: 'B'
    }
})
  • userId 包含用户ID的字符串。

我尝试过使用以下

       1. { _id: userId }
       2. { email: theEmailOfTheUser }

但是,updateResult 还是

 n:0, nModified:0,  ok:0

所以我认为它一定与方法本身有关,而不是在我的查询中。

此外,当我尝试使用以下查询查找用户时,它可以找到它:

const user = await UserModel.find({
        _id: userId
    });
//user is found

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

    实际上 mongoose 负责处理$set,您不必添加它。只是:

    const updateResult = await UserModel.updateOne({
        _id: userId
    }, {
        a: 'B'
    })
    

    但更好的解决方案是使用findByIdAndUpdate():

    const updateResult = await UserModel.findByIdAndUpdate(userId, {
        a: 'B'
    })
    

    【讨论】:

    • 谢谢,如果我必须 $push 怎么办?
    • 我认为您必须先找到文档并手动更新它。
    • 实际上 $push 按预期工作(而不是 $set)
    • 不错 :D 不知道!
    猜你喜欢
    • 2019-10-12
    • 2020-01-17
    • 2019-02-21
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多