首页 > 解决方案 > 我有一个带有子架构的架构。我想更新子架构中的特定数据

问题描述

这是我的架构

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)
   })

标签: javascriptnode.jsangularmongodbmongoose

解决方案


如果我理解你的问题,你需要使用 arrayFilters

  // 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 } ] });

注意:arrayFilters 只能用于 3.6+ mongo


推荐阅读