También he estado buscando esta respuesta, y no estoy seguro de que me guste acceder al último documento de la matriz. Sin embargo, tengo una solución alternativa. El método m['b'].push
devolverá un número entero, 1 o 0; supongo que se basa en el éxito del impulso (en términos de validación). Sin embargo, para obtener acceso al subdocumento, y particularmente al _id del subdocumento, debe usar create
método primero, luego push
.
El código es el siguiente:
var subdoc = m['b'].create({ ba: 234, bb: "World" });
m['b'].push(subdoc);
console.log(subdoc._id);
m.save(function(err, model) { console.log(arguments); });
Lo que sucede es que cuando pasa el objeto al método push o create, la conversión de esquema se produce de inmediato (incluidas cosas como la validación y la conversión de tipos); esto significa que este es el momento en que se crea ObjectId; no cuando el modelo se guarda de nuevo en Mongo. De hecho, mongo no asigna automáticamente valores _id a los subdocumentos, esta es una función de mongoose. Mongoose create está documentado aquí:create docs
Por lo tanto, también debe tener en cuenta que, aunque tenga un subdocumento _id, aún no está en Mongo hasta que lo guarde, así que desconfíe de cualquier acción DOCRef que pueda tomar.