如何仅更新特定字段并在使用 Mongoose 进行查找和更新时将其他字段保留为以前的值
how to only update specific fields and leave others with the previous values in findandupdate with Mongoose
我使用 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);
})
});
这里有一个 req.body 的例子。
我只更新了前端的标题和类别,这意味着其他所有内容都是空白的。当它保存在数据库中时,它只会更新标题和分类并将其他所有内容留空。我希望它不要将空白的插入数据库并保留字段原样
{
prodId: 'iPhone 111001200',
title: 'iPhone 11 Pro',
manufacturer: '',
catergory: 'Electronics',
price: '',
quantity: ''
}
这是我的模型
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;
然后是这样的:
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);
})}
您应该只使用 $set
来更新您想要更新的字段。在您的情况下,字段不是 ''
.
我使用 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);
})
});
这里有一个 req.body 的例子。 我只更新了前端的标题和类别,这意味着其他所有内容都是空白的。当它保存在数据库中时,它只会更新标题和分类并将其他所有内容留空。我希望它不要将空白的插入数据库并保留字段原样
{
prodId: 'iPhone 111001200',
title: 'iPhone 11 Pro',
manufacturer: '',
catergory: 'Electronics',
price: '',
quantity: ''
}
这是我的模型
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;
然后是这样的:
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);
})}
您应该只使用 $set
来更新您想要更新的字段。在您的情况下,字段不是 ''
.