为什么 findOneAndUpdate 没有在数据库中更新?
why is findOneAndUpdate not updating in the DB?
我正在使用 mern 堆栈创建一个项目。我正在尝试将一个项目从我的前端更新到我的后端。当我更新它时它会 return 成功但是当我检查数据库时没有任何更新?我正在尝试使用在前端输入的 prodID 更新产品
这是我的post路线
router.post("/updateStock", (req, res) => {
const prodID = req.body.prodID
const product = new Product(req.body)
Product.findOneAndUpdate(prodID, { new: true }, {returnOriginal: false}, function(err, products) {
if (err) {
console.log("err", err);
res.status(500).send(err);
} else {
console.log("success");
res.send(product);
}
});
});
这是我的架构
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;
您没有将新更新的正文传递给 findOneAndUpdate
。 findOneAndUpdate
期待 db.collection.findOneAndUpdate( filter, update, options )
。代码应该是这样的:-
router.post("/updateStock", (req, res) => {
const product = new Product(req.body);
const filter = {prodID: req.body.prodID}
Product.findOneAndUpdate(filter, product, { new: true, returnOriginal: false}, function(err, products) {
if (err) {
console.log("err", err);
res.status(500).send(err);
} else {
console.log("success");
res.send(product);
}
});
遵循此架构 =>
db.collection.findOneAndUpdate(filter, update, options)
传递更新对象
正在关注 Mongoose 文档 here
第一名:
您将过滤器添加为字符串,但它应该是如下所示的对象
const filter = {prodID: req.body.prodID}
第二名:
无需实例化 Product 模式,使用更新对象
const update = req.body
第三:
您使用了相同的选项,也 new:true
代替了更新对象
returnOriginal: false is equivalent to new: true
第四名:
使用 promise 而不是回调,但是您调用 products
并发送 product
的回调中有错字
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);
})
我正在使用 mern 堆栈创建一个项目。我正在尝试将一个项目从我的前端更新到我的后端。当我更新它时它会 return 成功但是当我检查数据库时没有任何更新?我正在尝试使用在前端输入的 prodID 更新产品
这是我的post路线
router.post("/updateStock", (req, res) => {
const prodID = req.body.prodID
const product = new Product(req.body)
Product.findOneAndUpdate(prodID, { new: true }, {returnOriginal: false}, function(err, products) {
if (err) {
console.log("err", err);
res.status(500).send(err);
} else {
console.log("success");
res.send(product);
}
});
});
这是我的架构
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;
您没有将新更新的正文传递给 findOneAndUpdate
。 findOneAndUpdate
期待 db.collection.findOneAndUpdate( filter, update, options )
。代码应该是这样的:-
router.post("/updateStock", (req, res) => {
const product = new Product(req.body);
const filter = {prodID: req.body.prodID}
Product.findOneAndUpdate(filter, product, { new: true, returnOriginal: false}, function(err, products) {
if (err) {
console.log("err", err);
res.status(500).send(err);
} else {
console.log("success");
res.send(product);
}
});
遵循此架构 =>
db.collection.findOneAndUpdate(filter, update, options)
传递更新对象
正在关注 Mongoose 文档 here
第一名:
您将过滤器添加为字符串,但它应该是如下所示的对象
const filter = {prodID: req.body.prodID}
第二名:
无需实例化 Product 模式,使用更新对象
const update = req.body
第三:
您使用了相同的选项,也 new:true
代替了更新对象
returnOriginal: false is equivalent to new: true
第四名:
使用 promise 而不是回调,但是您调用 products
并发送 product
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);
})