我正在尝试更新一个MongoDb
集合,该集合具有一个名为items
的文档数组。为此,我正在使用express
和mongoose
框架。
以下是我的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) { ... })