【问题标题】:update data in mongodb using nodejs使用nodejs更新mongodb中的数据
【发布时间】:2020-12-04 19:41:46
【问题描述】:

我是 NodeJS 和 mongodB 的初学者,我正在使用 mongoose 并尝试使用此代码更新产品数据

  return new Promise((resolve, reject) => {
    mongoose.connect(DB_URL, { useUnifiedTopology: true, useNewUrlParser: true }).then(() => 
            feature = new FaeturesModel({
              name: featureName,
              description: featureDesc,
              catagory: featureCatagory,
              price: featurePrice + ' IQD' ,
              image: featureImage,
              dateOfCreation: new Date().toJSON().slice(0, 10).replace(/-/g, '/')
            })).then(() => {
      return FaeturesModel.updateOne({"_id" : id} , {$set : {feature}})
            .then(()=> feature.save())
          .then(() => {
            mongoose.disconnect();
            resolve()
          }).catch(err => {
            mongoose.disconnect();
            reject(err)
          })
        }
      )
})}

问题是记录被添加为新记录而没有删除旧记录

【问题讨论】:

    标签: javascript node.js mongodb mongoose mongodb-query


    【解决方案1】:

    保存文档会创建一个新文档。 如果你想更新一些东西:

    await Model.updateOne({ _id: doc._id }, { $set: { name: 'foo' } })
    

    基本上去掉.then(()=> feature.save())就可以了。

    这是来自documentation

    编辑

    抱歉,我忘了说,当你更新时,你不会像 new Feature() 这样创建一个新文档,而是说:

    Model.updateOne({ _id: id }, { $set: req.body }).then(res => {
      // do stuff
    })
    

    因为new Feature() 创建了一个新文档,并附加了一个新的_id,因此您无法更新现有文档。

    希望现在很清楚:D

    编辑 2

    这不是问题的一部分,而是使用

    const schema = new Schema({
      ...
    },
    { timestamps: true });
    

    改为在您的架构中

    dateOfCreation: new Date().toJSON().slice(0, 10).replace(/-/g, '/')
    

    保存创建日期更容易。

    【讨论】:

    • 我删除了它并给了我一个错误,说在路径 '_id' 上执行更新会修改不可变字段 '_id' 并且从上面的代码中我没有更新 _id
    • 更新时尝试使用req.body 而不是new Feature()。所以FaeturesModel.updateOne({"_id" : id} , {$set : {req.body}})
    • 谢谢兄弟它成功了,我将在下面发布代码
    【解决方案2】:
    exports.updateFeature = (id,featureName, featureCatagory, featurePrice , featureDesc , featureImage) => {
      return new Promise((resolve, reject) => {
        mongoose.connect(DB_URL, { useUnifiedTopology: true, useNewUrlParser: true }).then(() => 
                feature =({
                  name: featureName,
                  description: featureDesc,
                  catagory: featureCatagory,
                  price: featurePrice + ' IQD' ,
                  image: featureImage,
                  dateOfCreation: new Date().toJSON().slice(0, 10).replace(/-/g, '/')
                })).then(() => {
          return FaeturesModel.updateOne({'_id' : id} , {$set : feature})
                
              .then(() => {
                mongoose.disconnect();
                resolve()
              }).catch(err => {
                mongoose.disconnect();
                reject(err)
              })
            }
          )
    })}```
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      • 2021-11-12
      • 2014-05-21
      • 2015-11-10
      • 2019-08-21
      • 1970-01-01
      • 2019-01-13
      相关资源
      最近更新 更多