Mongoose.js: как я могу обновить глубоко встроенный документ по его идентификатору?

Как обновить встроенный документ более чем на один уровень, используя _id элемента, который я хочу обновить?

Например, если в моем файле модели есть следующее:

var Subitems = new Schema({
  "title": String,
  "body": String
)}

var Items = new Schema({
  "title": String,
  "subitems": [Subitems]
)};

var Projects = new Schema({
  "title": String,
  "description": String,
  "items": [Items]
});

var exports = module.exports = mongoose.model('Project', Projects);

Как мне обновить body одного из моих subitems, если я знаю _id элемента subitems?

Я предполагаю, что сначала найду проект (достаточно просто), а затем перейду к subitems и сохраню проект. Итак, вопрос в том, как перейти к глубокому внедрению более чем на один уровень, не перебирая все выше него? Могу ли я сделать это по его _id ?


person k00k    schedule 15.02.2012    source источник
comment
Этот вопрос ответ на мой! Спасибо! :3   -  person Alexis Paques    schedule 20.05.2015


Ответы (1)


Хорошо, я думаю, я только что понял это. Забавно, как это всегда происходит сразу после публикации в SO :)

Вот что я сделал, дайте мне знать, если есть лучший/другой способ:

var myitem  = req.project.items.id(item_id);
myitem.body = req.body.item.body;

req.project.save(function (err){
  //woohoo! updated the embedded doc with the new values!      
});

Я понял это, следуя совету в выбранном ответе в этом сообщении SO: Как обновить встроенный документ в мангусте?

person k00k    schedule 15.02.2012