我有一个场景,我必须更新子集合中的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}]
}
答案 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
});
}
});
});