noo*_*23r 5 javascript mongoose mongodb node.js
我使用 Mongoose 创建了一个更新函数。但是,每当我使用 findOneAndUpdate 更新数据时。它仅更新输入的字段,并使其他字段现在为空或为空。我希望这样,当用户更新并且不更新文件时,它应该保持以前的样子,而不是现在为空。本质上只更新输入的字段。
这是我的路线
router.post("/updateStock", (req, res) => {
const filter = {prodId: req.body.prodID}
const update = req.body
Product.findOneAndUpdate(filter, update, {new: true}).then((product) => {
console.log("success");
res.send(product);
}).catch(err => {
console.log("err", err);
res.status(500).send(err);
})
});
Run Code Online (Sandbox Code Playgroud)
这是 req.body 的示例。我只更新了前端的标题和类别,这意味着其他所有内容都是空白的。当它保存在数据库中时,它只会更新标题和类别,而将其他所有内容留空。我希望它不要将空白插入数据库并保留字段原样
{
prodId: 'iPhone 111001200',
title: 'iPhone 11 Pro',
manufacturer: '',
catergory: 'Electronics',
price: '',
quantity: ''
}
Run Code Online (Sandbox Code Playgroud)
这是我的模型
const mongoose = require("mongoose");
const Product = mongoose.model(
"Product",
new mongoose.Schema({
title: String,
manufacturer: String,
price: String,
catergory: String,
quantity: String,
prodID: String,
images: Array
})
);
module.exports = Product;
Run Code Online (Sandbox Code Playgroud)
然后是这样的:
const update = {};
for (const key of Object.keys(req.body)){
if (req.body[key] !== '') {
update[key] = req.body[key];
}
}
test.findOneAndUpdate(filter, {$set: update}, {new: true}).then((product) => {
console.log("success");
res.send(product);
}).catch(err => {
console.log("err", err);
res.status(500).send(err);
})}
Run Code Online (Sandbox Code Playgroud)
您应该使用$setonly 来更新要更新的字段。在您的情况下,字段不是''.
| 归档时间: |
|
| 查看次数: |
3419 次 |
| 最近记录: |