Node.js 在mongoose中如何在没有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

我试图用其他列名而不是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 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()