Szukałem również tej odpowiedzi i nie jestem pewien, czy podoba mi się dostęp do ostatniego dokumentu tablicy. Mam jednak alternatywne rozwiązanie. Metoda m['b'].push
zwróci liczbę całkowitą, 1 lub 0 - zakładam, że jest to oparte na sukcesie push (pod względem walidacji). Jednak w celu uzyskania dostępu do poddokumentu, a w szczególności do _id poddokumentu - należy użyć create
najpierw metodę, potem push
.
Kod wygląda następująco:
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); });
Dzieje się tak, że gdy przekazujesz obiekt do metody push lub create, rzutowanie schematu następuje natychmiast (w tym takie rzeczy jak walidacja i rzutowanie typu) - oznacza to, że jest to czas, w którym tworzony jest ObjectId; nie wtedy, gdy model zostanie zapisany z powrotem w Mongo. W rzeczywistości mongo nie przypisuje automatycznie wartości _id do dokumentów podrzędnych, jest to cecha mangusty. Tworzenie Mongoose jest udokumentowane tutaj:tworzenie dokumentów
Powinieneś również zauważyć, że nawet jeśli masz poddokument _id - nie ma go jeszcze w Mongo, dopóki go nie zapiszesz, więc uważaj na wszelkie działania DOCRef, które możesz podjąć.