2015-11-16 9 views
5

Mam zestaw danych, które sąJak zaktualizować określone pole w mangusty?

var JobSchema = Schema({ 
    candidates: [{ 
    user: { type: Schema.Types.ObjectId, ref: 'User'}, 
    status: { type: String, default: 'In Progress' }, 
    }] 
}); 

Chcę znaleźć konkretny job's _id i zaktualizować pole konkretnego kandydata, takie jak { _id: 123, user: 12345, status: "In Progress" }

URL dla tej operacji jest --->localhost:3000/apply/:job_id/user_id

Na przykład

powiedzmy, że jest to bieżące dane zapisane w MongoDB pracy

{ 
    "_id" : 123, ---> job_id 

    "candidates" : 
    [{ 
     "_id" : 234 , 
     "user": 345 , --> user_id 
     "status" : "In Progress" 
    }, 

     { 
     "_id" : 345 , 
     "user": 678 , --> user_id 
     "status" : "In Progress" 
     }] 
    "__v" : 0 
    } 

Jak zaktualizować tylko konkretnego pola powiedzmy status pole, które należą do pewnego kandydatów _id w MongoDB, oto moja próba

  Job.update(
        { 
         _id: req.params.job_id, 
        }, 
        { 
         $set: {'candidates.$.status': 'Accepted'} , 
        }, function(err, count) { 
         if (err) return next(err); 
         callback(err, count); 
        }); 

będę się tego błędu Jeśli używam powyższą operację.

MongoError: operator pozycji nie znalazł dopasowania wymaganego z zapytania. Niespienione zmiana:.. Kandydaci $ stan

Odpowiedz

9

$ jest rozwiązanie:

Job.update(
    { 
     _id: found._id, 
     'candidates.user': req.params.user_id 
    }, 
    { 
     $set: { 'candidates.$.status': 'Accepted'} }, 
    }, function(err, count) { 
      if (err) return next(err); 
      callback(err, count); 
});