MongoDB:嵌套数组更新问题

我正在使用MEAN堆栈在网格中显示以下数组。

嵌套数组:

{ "_id":"1", "appDomain":[ { "appDomainName":"XYZ", "dashboard":[ { "envName":"UAT", "envDetails":[ { "hostnme":"ABC", "ip":"sdsdsdsd", "cpu":"-------", "memory":"-------", "disk":"-------", "downtime":"sdsdsdsd", "version":"dsdsdsd", "hostDetails":[ { "hostHdrName":"tomcat", "hostDetails":[ { "hostname":"FLT", "status":"UP", "path":"dfdf", "host":"sdsdsd", "port":"1112" } ] } ] } ] } ] }, { "appDomainName":"ABC", "dashboard":[ { "envName":"UAT", "envDetails":[ { "hostnme":"ABC", "ip":"sdsdsdsd", "cpu":"-------", "memory":"-------", "disk":"-------", "downtime":"sdsdsdsd", "version":"dsdsdsd", "hostDetails":[ { "hostHdrName":"tomcat", "hostDetails":[ { "hostname":"FLT", "status":"UP", "path":"dfdf", "host":"dfdfdf", "port":"1112" }, { "hostname":"SHP", "status":"DOWN", "path":"dfdfdf", "host":"fgfgfg", "port":"1112" } ] } ] } ] } ] } ] } 

Mangoose更新:我使用express.js来添加/更新和删除MangoDB中的条目。 我在更新嵌套数组中面临的问题。 请参阅下面的代码来更新嵌套数组。

 router.post('/appDomain/update/:appDomainName/:envName', function(req, res, next) { AppDomain.findOne({}, {_id: 0, appDomain: {$elemMatch: {appDomainName: req.params.appDomainName,}}}, function (err, appDomain) { if(appDomain.appDomain[0].dashboard[0].envName == req.params.envName ) appDomain.appDomain[0].dashboard[0].envDetails.push({}) appDomain.save(function (err) { if(err) { console.error('ERROR!'); } }); res.json(appDomain); }); }) 

但是,它不是更新。 如果有人能帮我解决

AppDomainModel架构


     var Schema = mongoose.Schema;

     var serverDetails = new Schema({
        主机名:string,
         ip:String,
        状态:string,
        path:string,
        主机:string,
        端口:string
     });

     var hostDetail = new Schema({
         hostHdrName:String,
         hostDetails:[serverDetails]
     });

     var keyValue = new Schema({
         keyHdrName:String,
         keyValueData:[{key:String,value:String}]
     });

     var envSchema = new Schema({
         hostnme:string,
         ip:String,
         cpu:string,
        内存:string,
        磁盘:string,
        停机时间:string,
        版本:string,
         hostDetails:[hostDetail],
         keyValues:[keyValue],
        活动:{
            最近:[keyValue],
            计划:[keyValue]
         }
     });

     var dashboardSchema = new Schema({
         envName:String,
         env详细信息:[envSchema]
     });



     var appDomainSchema = new Schema({
         _id:string,
        的AppDomain:[{
             appDomainName:{type:String,index:{unique:true}},
            仪表板:[dashboardSchema]
         }]
     });

     var AppDomain = mongoose.model('AppDomain',appDomainSchema);
     var Dashboard = mongoose.model('Dashboard',dashboardSchema);
     var EnvSchema = mongoose.model('EnvSchema',envSchema);

更新后,我正在使用以下函数来检查值。但更新的一个不可用在数据库中。

 
 router.get('/ app / domain / get /:appDomainName',函数(req,res,next){



    AppDomain.find({},{_id:0,appDomain:{$ elemMatch:{appDomainName:req.params.appDomainName,}}},function(err,appDomain){ 



     res.json(的AppDomain);

    });


 });

经过漫长的斗争,我find了答案。 看下面的答案。


     var data2 = {};
      AppDomain.update(
       {_id:1,'appDomain.appDomainName':req.params.appDomainName,'dashboard。$。envName':{$ nin:[req.params.envName]}},
             {$ push:{'appDomain。$。dashboard.0.envDetails':{'envDetails':[data2]}}},
            函数(err,model){
                的console.log(ERR);
             }
         );

我怀疑你的更改实际上是成功保存的,但是你回复得太快了。 尝试这个:

 appDomain.save(function (err, savedAppDomain) { if(err) { console.error('ERROR!'); next(err); return; } res.json(savedAppDomain): }); // Removed: //res.json(appDomain); //});