2016-06-06 16 views
1

meiner Sammlung ist wie folgt:Mongoose: update verschachtelt Dokument Array

"_id" : ObjectId("5751f7892ae95d601f40411d"), 

    "doc" : [ 
    { 
     "org" : ObjectId("5751f7892ae95d601f40411c"), 
     "action" : 0, 
     "_id" : ObjectId("5751f7892ae95d601f40411e") 
    }, 
    { 
     "org" : ObjectId("5751952cace204c507fad255"), 
     "action" : 1, 
     "_id" : ObjectId("575217ce341cf6512b8dff39") 
    }  ] 

Ich möchte mit org im doc Aktionsfeld aktualisieren: 5751952cace204c507fad255 so wird Aktion gleich 2 Ich weiß, das hat schon viele beantwortet Zeiten, aber es ist nicht

Hier arbeiten für mich ist, was ich versucht, aber Sammlung nicht ändern:

 Model.update(
    { 
     "_id":ObjectId("5751f7892ae95d601f40411d"), 
     "doc.org":ObjectId("5751952cace204c507fad255") 
    }, 
    { 
     "$inc": { 
       "doc.$.action": 1 
     } 
    } 
) 
+0

Wo bekommen Sie die 'ObjectId()' Wrapper aus? – chridam

+0

var ObjectId = require ('Mungo'). Types.ObjectId; Ich dachte auch, es ist ein Problem, meine Sammlung zu finden, aber ich habe Model.find mit den gleichen Bedingungen ausprobiert und das Ergebnis gedruckt und meine Sammlung wurde erfolgreich gefunden. –

+0

Haben Sie versucht, ohne die Zeichenfolge '_id' zu aktualisieren? – chridam

Antwort

1

Dose versuchen Positionsoperator $ auf abgestimmte Aktion doc.$.action

wie zu erhöhen:

//assume you passed modelId and orgId in request body 
// According to your tag you may used mongoose so use mongoose.Types.ObjectId('5751f7892ae95d601f40411d') instead of ObjectId("5751f7892ae95d601f40411d") 
// or direct req.body.modelId without convert 
Model.update(
    { 
     "_id": req.body.modelId, 
     "doc.org": req.body.orgId 
    }, 
    { 
     "$inc": { 
       "doc.$.action": 1 
     } 
    }, 
    function(error, updatedData) { 
     if(error) { 
      return res.status(400).send(error); 
     } 
     return res.status(200).send(updatedData); 
    } 
); 
+0

Sorry, ich habe nur vergessen setze das $ wenn ich meine Frage geschrieben habe, eigentlich sogar mit doc. $. action, meine Sammlung wurde nicht aktualisiert –

+0

kannst du versuchen mit '" _id ": req.body.modelId' oder' mongoose.Types.ObjectId (" 25 ... ")' für beide '_id' und' doc.org' –

+0

Ich versuchte beide, aber ohne Erfolg, versuchte ich auch in Mongo Shell, wenn ich dies zu meiner Abfrage hinzufügen {upsert: true}, bekomme ich einen Fehler : \t "errmsg": "Der positionelle Operator hat die von der Abfrage benötigte Übereinstimmung nicht gefunden. Unerweiterte Aktualisierung: doc. $. Action" –

Verwandte Themen