Mongoose.js: ¿Cómo puedo actualizar un documento incrustado profundo por su identificación?

StackOverflow https://stackoverflow.com/questions/9300098

Pregunta

¿Cómo puedo actualizar un documento incrustado que tenga más de un nivel de profundidad utilizando el _id del elemento que deseo actualizar?

Por ejemplo, si tengo lo siguiente en mi archivo de modelo:

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

¿Cómo haría para actualizar el body de uno de mis subitems donde conozco el _id del subitems ¿elemento?

Supongo que primero encontraría el proyecto (bastante fácil), y luego empujaría al subitems y guardar el proyecto. Entonces, la pregunta es, ¿cómo se lleva a una incrustación de más de un nivel sin tener que iterar a través de todo por encima de él? ¿Puedo hacerlo por su _id ?

¿Fue útil?

Solución

Ok, creo que lo descubrí. Es curioso cómo eso siempre sucede justo después de publicar a SO :)

Esto es lo que hice, avíseme si hay alguna forma mejor/diferente:

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

Lo descubrí siguiendo el consejo en la respuesta seleccionada en esto, así que publicar:¿Cómo actualizar el documento integrado en Mongoose?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top