【问题标题】:How to update record without objectID in mongoose?如何在猫鼬中更新没有objectID的记录?
【发布时间】:2020-03-31 09:23:07
【问题描述】:

我正在尝试用 其他一些列名而不是 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 我想更新记录。

【问题讨论】:

    标签: node.js mongodb express mongoose postman


    【解决方案1】:

    如果你不想使用 id,你应该使用 findOneAndUpdate() (而不是 findByIdAndUpdate() :

    await MyModel.findOneAndUpdate({}, { $set: { name: 'foo' } });
    

    否则,您应该首先获取要更新的文档,并使用您想要的任何查询过滤器:

    const purchaseInvoice = await PurchaseInvoice.findOne(< query filter >);
    

    然后像经典的 javascript 对象一样更新您的文档:

    purchaseInvoice.FlagID = req.body.FlagID,
    purchaseInvoice.InvoiceNo =  req.body.InvoiceNo,
    purchaseInvoice.RefNo = req.body.RefNo, etc...
    
    purchaseInvoice.save()
    

    但它会在幕后使用 _id。

    【讨论】:

      猜你喜欢
      • 2017-05-20
      • 2020-07-25
      • 2018-07-12
      • 2020-08-15
      • 2013-01-14
      • 2018-10-28
      • 2012-05-18
      • 2019-09-16
      相关资源
      最近更新 更多