【问题标题】:mongodb updateOne method is not working with mongoose 5.4.10mongodb updateOne 方法不适用于 mongoose 5.4.10
【发布时间】:2020-07-07 20:06:51
【问题描述】:

我正在尝试使用 updateOne 方法更新 mongodb 的记录,但它不起作用。

async function updateCourse(id) {
   const result = await  Course.updateOne({_id : id }, { name: 'Abc'}, 
         function(err, res) {});
   console.log(result);
}

请任何人提出解决此问题的可能解决方案。

谢谢

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    试试这个代码

    const test = async function updateCourse(id) {
      const result = await Course.updateOne({ _id: id }, { name: "Abc" })
      console.log(result);
    };
    
    

    如果你使用异步等待,不要再使用回调

    我希望这可以帮助你。谢谢

    【讨论】:

    • 未收到任何错误但记录未更新。这是此代码的输出:{ n: 0, nModified: 0, ok: 1 }
    • 当我忘记在架构中包含更新的字段时,我也遇到了同样的问题。
    • 它有效,但我无法理解原因。您能否更具体地解释一下发送整个文档和仅发送 id 之间的区别?
    【解决方案2】:

    嗯,你试试这个兄弟吗?

    const result = await Course.findOneAndUpdate( { _id: id }, {  name: "Abc" }, { new: true } )
    

    【讨论】:

      【解决方案3】:

      我也无法让它工作。对我来说,我必须这样做:

      let tempSubDoc = await myDocument.mySubDocument.id(my_id);
      
      tempSubDoc.value1 = val1;
      tempSubDoc.value2 = val2;
      
      await myDocument.save();
      

      文档说当对象被更新和保存时,Mongoose 会在内部向 MongoDb 发送一个 UpdateOne 命令:https://mongoosejs.com/docs/documents.html

      【讨论】:

      • 如果您在保存时使用中间件,例如散列密码,这将再次散列散列密码。
      【解决方案4】:

      我认为这会对某人有所帮助,

      您必须在 mongoose 架构中添加需要更新的字段,否则它会删除这些字段,这就是更新未完成的原因。

      在这种情况下,“名称”字段必须添加到“课程”架构中。您也可以使用“等待”,而不使用回调函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-29
        • 1970-01-01
        • 2011-08-21
        • 2020-04-15
        • 2020-03-26
        • 2019-03-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多