Node.js 在mongoose中如何在没有objectID的情况下更新记录?
我试图用其他列名而不是ObjectID来更新记录,但它不起作用。如何解决这个问题Node.js 在mongoose中如何在没有objectID的情况下更新记录?,node.js,mongodb,express,mongoose,postman,Node.js,Mongodb,Express,Mongoose,Postman,我试图用其他列名而不是ObjectID来更新记录,但它不起作用。如何解决这个问题 router.put('/:InvoiceNo/', async (req,res)=>{ if(req.body.FlagID==2){ var InvoiceNo = parseInt(req.params.InvoiceNo); console.log(parseInt(req.params.InvoiceNo)); var purchaseIn
router.put('/:InvoiceNo/', async (req,res)=>{
if(req.body.FlagID==2){
var InvoiceNo = parseInt(req.params.InvoiceNo);
console.log(parseInt(req.params.InvoiceNo));
var purchaseInvoice= new PurchaseInvoice({
FlagID: req.body.FlagID,
InvoiceNo: req.body.InvoiceNo,
RefNo: req.body.RefNo,
InvoiceDate: req.body.InvoiceDate,
VendorName: req.body.VendorName,
GSTNo: req.body.GSTNo,
VendorType: req.body.VendorType,
Address: req.body.Address,
State: req.body.State,
TransportMode: req.body.TransportMode,
TransportNumber: req.body.TransportNumber,
PurchaseType: req.body.PurchaseType,
DueDate: req.body.DueDate,
DeliveryNote: req.body.DeliveryNote,
Remarks: req.body.Remarks,
Materials: req.body.Materials,
Expenses: req.body.Expenses,
Commission: req.body.Commission,
Discount: req.body.Discount,
Adjustment: req.body.Adjustment,
GrandTotal: req.body.GrandTotal
});
**PurchaseInvoice.findByIdAndUpdate( {InvoiceNo : InvoiceNo} , { $set: req.body }, { useNewUrlParser: true, useFindAndModify: false }, (err, doc) => {**
if (!err) { res.send(doc); }
else { console.log('Error in Purchase Invoice Update :' + JSON.stringify(err, undefined, 2)); }
});
}
});
我面临着这个错误:
Error in Purchase Invoice Update :{
"message": "Cast to ObjectId failed for value \"{ InvoiceNo: 1001 }\" at path \"_id\" for model \"PurchaseInvoice\"",
"name": "CastError",
"stringValue": "\"{ InvoiceNo: 1001 }\"",
"kind": "ObjectId",
"value": {
"InvoiceNo": 1001
},
"path": "_id"
}
有了ObjectID,它可以正常工作,但没有ObjectID,我想更新记录。如果不想使用id,应该使用findOneAndUpdate()(而不是FindByidUpdate(): 否则,您应该首先获取要更新的文档,并使用所需的任何查询筛选器:
const purchaseInvoice = await PurchaseInvoice.findOne(< query filter >);
但它将在幕后使用_id。如果您不想使用该id,则应使用findOneAndUpdate()(而不是findbyiandupdate(): 否则,您应该首先获取要更新的文档,并使用所需的任何查询筛选器:
const purchaseInvoice = await PurchaseInvoice.findOne(< query filter >);
但它将使用幕后的_id
purchaseInvoice.FlagID = req.body.FlagID,
purchaseInvoice.InvoiceNo = req.body.InvoiceNo,
purchaseInvoice.RefNo = req.body.RefNo, etc...
purchaseInvoice.save()