2015-11-16 11 views
5

Ich habe einen Datensatz, derWie aktualisiere ich ein bestimmtes Feld in Mungo?

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

ist in einem bestimmten Verzeichnis job's _id finden wollen und eine spezifische Kandidaten-Feld zu aktualisieren, wie { _id: 123, user: 12345, status: "In Progress" }

Die URL für diese Operation --- ist>localhost:3000/apply/:job_id/user_id

Zum Beispiel

Lassen Sie sagen, dass dies die aktuellen gespeicherten Daten in Job mongodb ist

{ 
    "_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 
    } 

Wie aktualisiere ich nur ein bestimmtes Feld lassen sagen status Feld, das _id in mongodb zu einem gewissen Kandidaten gehört, Hier ist mein Versuch

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

Ich werde diesen Fehler Wenn ich den obigen Vorgang verwenden.

MongoError: Der positionelle Operator hat die von der Abfrage benötigte Übereinstimmung nicht gefunden. Nichtexpandierten Update:.. Kandidaten $ status

Antwort

9

$ ist die Lösung:

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