仅从Mongo

时间:2016-11-07 11:58:09

标签: node.js mongodb mongoose

我有一个像这样的猫鼬查询:

var query = Events.findOneAndUpdate({ '_id': event._id,'participants._id':participant._id},{'$set': {'participants.$': participant}}, {upsert:false,new: true},function(err,result){
    if(err){
        return res.status(500).jsonp({
            error: 'Unable to update participant'
        });
    }
    console.log(result.participants[0]);
    res.jsonp(result.participants[0]);
});

并且查询可以正常修改Events集合中的参与者子文档。

问题:

我只需要将修改后的参与者作为JSON返回,并且我不需要整个参与者数组,但我无法实现这一点,因为我在console.log(result.participants);

如何在查询后只获取修改后的子文档?

1 个答案:

答案 0 :(得分:0)

您可能必须使用原生JS filter() 方法,如下所示:

Events.findOneAndUpdate(
    { '_id': event._id, 'participants._id': participant._id },
    { '$set': { 'participants.$': participant } }, 
    { upsert: false, new: true },
    function(err, result){
        if(err){
            return res.status(500).jsonp({
                error: 'Unable to update participant'
            });
        }
        var modified = result.participants.filter(function(p){
            return p._id === participant._id
        })[0];
        console.log(modified);
        res.jsonp(modified);
    }
);