Търсих и този отговор и не съм сигурен, че ми харесва да влизам в последния документ от масива. Имам обаче алтернативно решение. Методът m['b'].push
ще върне цяло число, 1 или 0 - предполагам, че това се основава на успеха на натискането (по отношение на валидирането). Въпреки това, за да получите достъп до поддокумента и по-специално до _id на поддокумента - трябва да използвате create
първо метод, след това push
.
Кодът е както следва:
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); });
Това, което се случва е, че когато предадете обекта към метода push или create, прехвърлянето на схемата се извършва незабавно (включително неща като валидиране и прехвърляне на тип) - това означава, че това е времето, в което се създава ObjectId; не когато моделът е запазен обратно в Mongo. Всъщност mongo не присвоява автоматично стойности на _id на поддокументи, това е функция на мангуста. Създаването на Mongoose е документирано тук:създаване на документи
Ето защо трябва също да отбележите, че въпреки че имате поддокумент _id - той все още не е в Mongo, докато не го запазите, така че не се уморявайте от всяко действие на DOCRef, което може да предприемете.