使用nodejs更新mongodb中的数据



我是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)
})
}
)
})}

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

保存文档会创建一个新文档。如果你想更新什么:

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

基本上移除.then(()=> feature.save()),它就会工作。

这来自文档。

编辑

抱歉,我忘了提一下,当你更新时,你不会创建像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, '/')

保存创建日期更容易。

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)
})
}
)
})}```

最新更新