更新嵌入式Mongo文档字段而不影响其他字段

时间:2016-08-19 18:30:44

标签: json node.js mongodb express

我有以下代码对Mongo文档执行基本更新。问题是,在运行/stop/:id路由后,startDate字段将从嵌入文档中删除。在endDatestarted字段更新后,如何确保它保留在那里?

router.get('/start/:id', function(req,res){
    var collection = db.get('Activity');
    collection.update({
        _id: req.params.id
    },
    {
        $set: {
            "runtime": {
                    started: true,
                    startDate: new Date(),
                    endDate: null
            }
        }
    }, function(err, activity){
        if (err) throw err;
        res.json(activity);
    });
});

router.get('/stop/:id', function(req,res){
    var collection = db.get('Activity');
    collection.update({
        _id: req.params.id
    },
    {
        $set: {
            "runtime.started": false,
            "runtime.endDate": new Date()       
        }
    }, function(err, activity){
        if (err) throw err;
        res.json(activity);
    });
});

2 个答案:

答案 0 :(得分:1)

使用$addToSet

来解决这个问题
router.get('/stop/:id', function(req,res){
    var collection = db.get('Activity');
    collection.update({
        _id: req.params.id
    },
    {
        $addToSet: {
            "runtime.started": false,
            "runtime.endDate": new Date()       
        }
    }, function(err, activity){
        if (err) throw err;
        res.json(activity);
    });
});

答案 1 :(得分:0)

以下是这方面的工作代码:

router.get('/stop/:id', function(req,res){
    var collection = db.get('Activity');

    collection.update({
        _id: req.params.id
    },
    {
        $set: {
            "runtime.started": false,
            "runtime.endDate": new Date()
        }   
    }, 
    function(err, activity){
        if (err) throw err;
        res.json(activity);
    });
});