Mongoose.js: ¿Cómo puedo actualizar un documento incrustado profundo por su identificación?
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
?
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?