无法更新status_code

时间:2014-12-13 08:18:17

标签: javascript node.js mongodb mongoose nosql

我有一个场景,我必须更新子集合中的status_code,所以我必须设置status_code。但是我无法设置status_code。以下是我的代码json

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 个答案:

答案 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
                    });
            }
    });

});