Javascript 我有一个带有子模式的模式。我想更新子架构中的特定数据
这是我的模式Javascript 我有一个带有子模式的模式。我想更新子架构中的特定数据,javascript,node.js,angular,mongodb,mongoose,Javascript,Node.js,Angular,Mongodb,Mongoose,这是我的模式 const mongoose = require('mongoose') const MaterialListSchema = new mongoose.Schema({ nomenclature:{ type: String, required: true }, national: { type: String, required: true }, partnumber:{
const mongoose = require('mongoose')
const MaterialListSchema = new mongoose.Schema({
nomenclature:{
type: String,
required: true
},
national: {
type: String,
required: true
},
partnumber:{
type:String,
required:true
},
quantity: {
type: Number,
required: true
},
unit:{
type: String,
required: true
},
price: {
type: Number,
required: true
}
})
const MrrlSchema = new mongoose.Schema({
aircrafttype:{
type: String,
required: true
},
mrrlcategory:{
type: String,
required: true
},
materiallist: [MaterialListSchema]
})
const Mrrl = mongoose.model('Mrrl', MrrlSchema)
module.exports = Mrrl
这是我的更新代码。但它将删除选定文档上的所有子文档,并且只保留剩余的子文档
Mrrl.updateOne({
'materiallist': {$elemMatch: { _id: req.params.id}}
},{
$set: { materiallist: req.body }
}).then((data)=>{
console.log(data)
})
如果我理解你的问题,你需要使用阵列过滤器
// it is your req.body
const newMaterial = {
nomenclature: '2'
};
const result = await MrrlSchema.updateMany({ 'materiallist': {$elemMatch: { _id: req.params.id }} },
{ "$set": { "materiallist.$[material]": newMaterial } },
{ "arrayFilters": [ { "material._id": req.params.id } ] });
注意:ArrayFilter只能与3.6+mongo一起使用也不起作用。它将添加新文档,而不是更新。请提供您的输入和预期结果。您的请求正文是什么?数组?{U id:{O id:{O id:“5F698F9AD2E0DA5DC5B8E4},“飞机类型”:“UH-1H”,“MRRL类别”:“结构”,“材料师”:[{U id:{O id:{O id:“5f6c919bac3c1e9e7f589aaf},{U id:{O id:“5f6c96d7f2d41aa54a510094},”术语:“a”你能寄给我两件东西吗。你需要什么样的身体。更新后在materiallist中的期望值