Jeg har også ledt efter dette svar, og jeg er ikke sikker på, at jeg kan lide at få adgang til det sidste dokument i arrayet. Jeg har dog en alternativ løsning. Metoden m['b'].push
vil returnere et heltal, 1 eller 0 - jeg antager, at det er baseret på succesen med push (med hensyn til validering). Men for at få adgang til underdokumentet, og især _id'et for underdokumentet - skal du bruge create
metode først, derefter push
.
Koden er som følger:
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); });
Det, der sker, er, at når du sender objektet ind til enten push- eller create-metoden, sker Schema-castet med det samme (inklusive ting som validering og type-casting) - det betyder, at det er det tidspunkt, hvor ObjectId'et oprettes; ikke når modellen er gemt tilbage til Mongo. Faktisk tildeler mongo ikke automatisk _id-værdier til underdokumenter, dette er en mongoose-funktion. Mongoose create er dokumenteret her:create docs
Du bør derfor også bemærke, at selvom du har et underdokument _id - er det endnu ikke i Mongo, før du gemmer det, så vær træt af enhver DOCRef handling, du måtte tage.