2016-04-19 32 views
1

ich diesen Endpunkt haben:aktualisieren Subdokument nicht funktioniert NodeJS MongoDB express

restaRouter.route('/lists/:id/') 
    .post(function(req, res) { 
     db.Restaurant.update({_id: req.params.id}, { $push: { reviews: req.body }}, function(err, doc) { 
      if (err) { 
       res.send(err); 
      } 
      res.json(doc); 
     }) 
    }); 

Wenn ich einen Beitrag zu tun, wird angenommen, ein Dokument wie dies mit der _id zu finden. Die _id dynamisch generiert:

{ 
    "_id": "571616e420cac41111e90ecf", 
    "title": "Yep", 
    "address": "Somewhere", 
    "about": "Everything", 
    "reviews": [ 
    { 
     "name": "My name", 
     "email": "[email protected]", 
     "message": "My message" 
    } 
    ] 
} 

und schieben Sie ein Element in die Bewertungen Feld als Subdokument.

req.body sieht wie folgt aus:

{ 
    "name": "foo", 
    "email": "[email protected]", 
    "message": "myFoo bar" 
} 

Kenne ich ein JSON-Objekt ist das, was den Endpunkt trifft? Ja. A console.log(req.body) bestätigt.

Im Moment, wenn ich schreibe, ist die Antwort, die ich zurück

{ 
    "ok": 1, 
    "nModified": 0, 
    "n": 0 
} 

Nichts dann geändert wurde. Was mache ich falsch? Ich bezweifle es etwas damit zu tun hat, aber ich bin mit mongojs

Antwort

3

In Ihrer Anfrage Sie {_id:ObjectId('myobectID')}

So mit Ihrem exemple verwenden:

db.Restaurant.update({_id: ObjectId(req.params.id)}, { $push: { reviews: req.body }}, function(err, doc) { 
... 
} 

mongojs spezifischen

Da das OP mongojs erwähnt, könnte das gleiche oben getan werden mit:

db.Restaurant.update({_id: mongojs.ObjectId(req.params.id)} ... 
+0

Behoben. Es ist irgendwie komisch, dass ich das vermisst habe. Danke – Rexford

+2

Wenn Sie die Antwort akzeptieren könnten, wird mein Ruf dankbar sein :) – Bameza