2012-04-03 7 views
1

ich habe schon mongoose dokument gelesen, und ich kann immer noch nicht herausfinden, wie man das dokument aktualisiert.Wie mongoose update verwenden und ein einbettendes Dokument aktualisieren?

Ich benutze Node, Express und Mongodb mit Mungo.

dies ist eine Sammlung in meinem mongodb ...

{ "title" : "this is a title", 
    "_id" : ObjectId("4f7a92554ad893f322000004"), 
    "nodes" : [ 
       { "title" : "this is node 1", 
        "_id" : ObjectId("4f7a92554ad893f322000009") }, 
       { "title" : "this is node 2", 
        "_id" : ObjectId("4f7a92554ad893f322000008") }, 
       { "title" : "this is node 3", 
        "_id" : ObjectId("4f7a92554ad893f322000007") }, 
       { "title" : "this is node 4", 
        "_id" : ObjectId("4f7a92554ad893f322000006") }, 
       { "title" : "this is node 5", 
        "_id" : ObjectId("4f7a92554ad893f322000005") } 
      ] 
} 

wie i-Knoten-Dokument einbetten aktualisiere ???

app.put('/api/paper/:pid/:nid', function(req, res) { 
    var PaperModel = mongoose.model('papers', Paper); 
    PaperModel.update({_id: req.params.pid, 'nodes._id': req.params.nid}, {title: 'this   is a new node title'}, function(error, result) { 
     console.dir(result); 
    }); 
}); 

es funktioniert nicht.

Wie aktualisiere ich einbetten Array „Knoten“

nodes._id: 4f7a92554ad893f322000009 Titel: Dies ist der Knoten 1 bis Titel: Dies ist ein neuer Titel?

Antwort

7
PaperModel.update(
    {_id: req.params.pid, 'nodes._id': req.params.nid} 
    , { $set: {'nodes.$.title': 'this is a new node title'}} 
    , function(error, result) { 
     console.dir(result); 
    } 
); 

Beachten Sie, dass dies nur jeweils ein Unterdokument aktualisieren kann (Mongodb-Einschränkung).