sql >> Base de Datos >  >> NoSQL >> MongoDB

encontrar id del último subdocumento insertado en mongoose

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.