Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我有一个带有子模式的模式。我想更新子架构中的特定数据_Javascript_Node.js_Angular_Mongodb_Mongoose - Fatal编程技术网

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中的期望值