2016-08-19 4 views
0

Mongoドキュメントで基本的な更新を行う次のコードがあります。問題は、/stop/:idルートを実行すると、startDateフィールドが埋め込みドキュメントから削除されることです。 endDateフィールドとstartedフィールドが更新された後、それをそのまま維持する方法を教えてください。次$addToSet他のフィールドに影響を与えずに埋め込みMongoドキュメントフィールドを更新する

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

答えて

0

を使用して

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

TRHこれは、このための作業コードです:

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

これが仕事に行くのではありません。 $ addToSetは配列に要素を追加するためのものです。私の場合は、埋め込みドキュメントに要素を追加/変更しようとしています。 – MadPhysicist

関連する問題