【问题标题】:Update Embedded Mongo Document Field Without Affecting Other Fields在不影响其他字段的情况下更新嵌入式 Mongo 文档字段
【发布时间】:2016-08-19 18:30:43
【问题描述】:

我有以下代码对 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);
    });
});

【问题讨论】:

    标签: json node.js mongodb express


    【解决方案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);
        });
    });
    

    【讨论】:

    • 这行不通。 $addToSet 似乎用于向数组添加元素。就我而言,我正在尝试在嵌入式文档上添加/更改元素。
    【解决方案2】:

    下面是一个工作代码:

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

    【讨论】:

      猜你喜欢
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多