2016-04-19 3 views
1

У меня есть эта конечная точка:Update поддокументе не работает nodejs MongoDB выразить

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

Когда я делаю пост, он должен найти документ, как это с помощью _id. _id динамически генерируются:

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

и нажать элемент в поле обзоров как поддокумент.

req.body выглядит следующим образом:

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

ли я знаю, что объект JSON является то, попав в конечной точке? Да. A console.log(req.body) подтверждает.

В тот момент, когда я пост, ответ я вернусь не

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

Ничего модифицировали тогда. Что я делаю не так? Я сомневаюсь, что это не имеет ничего общего с этим, но я использую mongojs

ответ

3

В вашем запросе вы должны использовать {_id:ObjectId('myobectID')}

So с Exemple:

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

mongojs конкретного

Поскольку ОП упоминает mongojs, то же самое можно сделать с помощью:

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

Исправлено. Его любопытное странное я пропустил это. Спасибо – Rexford

+2

Если бы вы могли принять ответ, моя репутация будет благодарна :) – Bameza