2014-12-13 35 views
0

我有一个场景,我必须更新子集合中的status_code,以便我必须设置status_code。但我不能设置status_code。这是下面的示例JSON无法更新status_code

router.route('/user/:_id/host/:_id/accept/').post(
     function(req, res) { 
      var finalList = []; 
      Host.findOne({ 
       _id : req.params._id 
      }, function(err, host) { 
       if (err) { 
        res.send(err); 
       } else { 
        var count = host.joinees.length; 
        var limits = []; 
        for (var i = 0; i < count; i++) { 
         limits.push(i); 
        } 
        async.eachSeries(limits, function(i, callback) { 
         var ID = host.joinees[i].userid; 
         if (ID === req.body.userid) { 
          // update the status code 
         } 
        }, function() { 
         res.json({ 
          requestStatus : 1, 
          message : "Request Accepted!", 
         }); 
        }); 
       } 
      }); 
     }); 

我的代码这是样品JSON

样品JSON

{_id:"123", 
joinees : [{userid : "a",status_code : 0},{userid : "b",status_code : 0}] 
} 

回答

1

试试这一个。您可以更新子集合的字段,即status_code。

router.route('/user/:_id/host/:_id/accept/').post(function(req, res) { 

    Host.findOneAndUpdate({ 
      "_id" : req.body.eventid, 
      "joinees" : { 
        "$elemMatch" : { 
          "userid" : req.body.userid 
        } 
      } 
    }, { 
      "$set" : { 
        "joinees.$.status_code" : 1 
      } 
    }, { 
      "new" : true, 
      "upsert" : false 
    }, function(err, host) { 
      if (err) { 
        console.log(err); 
        res.json(err); 
      } else { 
        res.json({ 
          message : "request Accepted", 
          requestStatus : 1 
        }); 
      } 
    }); 

});