如何在猫鼬中更新数组元素 - MongoDB



我正在尝试更新一个MongoDb集合,该集合具有一个名为items的文档数组。为此,我正在使用expressmongoose框架。

以下是我的schema的样子:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;
let invoices = new Schema({
vendor: { type: String },
invoiceDate: { type: Date, default: Date.now },
expectedDate: { type: Date, default: Date.now },
billingAddress: { type: String },
contactPerson: { type: String },
items: [
{
itemID: Schema.Types.ObjectId,
qty: { type: Number },
unitPrice: { type: Number },
linePrice: { type: Number }
}
],
totalPrice: { type: Number }
});
module.exports = mongoose.model("invoices", invoices);

我想通过首先找到该特定文档的 ID 然后相应地更新items来更新某个文档。

这就是我到目前为止尝试的,我不知道下一步要去哪里更新数组items

//end-point-4
Routes.route('/update/:id').post((req, res) => {
invoicesDB.findById(req.params.id, (err, invoice) => {
if(!invoice){
res.status(404).send('Not found!');
}else{
invoice.vendor = req.body.vendor;
invoice.invoiceDate = req.body.invoiceDate;
invoice.expectedDate = req.body.expectedDate;
invoice.billingAddress = req.body.billingAddress;
invoice.contactPerson = req.body.contactPerson;
//how to update items
invoice.items = req.body.items; //this I guess, gives the answer but not sure.
invoice.totalPrice = req.body.totalPrice;
}
});
});

PS:我不想更新items中的某个项目。我想要的是用给定的值更新数组中的每个项目。

例如,假设用户只想更新items中的特定项目,因此只应更新该特定项目。

您可以按如下方式直接进行更新:

invoicesDB.update(
{ "_id" : :req.params.id, “items._id": “Id of item for which
user needs to update” }, 
{ "$set": { “items.$.qty”: 5}}, 
function(err, company) {
console.log(company)
})

在猫鼬上,有一个"$">表示数组,你可以这样做:

invoicesDB.update({_id: req.params.id}, {'$set': {
'items.$.itemID': 'Here is where you update',
}}, function(err) { ... })

最新更新