Ich habe auch nach dieser Antwort gesucht und bin mir nicht sicher, ob ich gerne auf das letzte Dokument des Arrays zugreife. Ich habe jedoch eine alternative Lösung. Die Methode m['b'].push
gibt eine ganze Zahl zurück, 1 oder 0 - ich gehe davon aus, dass dies auf dem Erfolg des Pushs basiert (in Bezug auf die Validierung). Um jedoch Zugriff auf das Unterdokument und insbesondere die _id des Unterdokuments zu erhalten, sollten Sie den create
verwenden Methode zuerst, dann push
.
Der Code lautet wie folgt:
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); });
Was passiert ist, dass, wenn Sie das Objekt entweder an die push- oder die create-Methode übergeben, die Schemaumwandlung sofort erfolgt (einschließlich Dinge wie Validierung und Typumwandlung) – das bedeutet, dass dies der Zeitpunkt ist, zu dem die ObjectId erstellt wird; nicht, wenn das Modell wieder in Mongo gespeichert wird. Tatsächlich weist Mongo Subdokumenten nicht automatisch _id-Werte zu, dies ist eine Mongoose-Funktion. Mongoose create ist hier dokumentiert:create docs
Sie sollten daher auch beachten, dass, obwohl Sie eine Subdocument _id haben, diese noch nicht in Mongo ist, bis Sie sie speichern, also seien Sie jeder DOCRef-Aktion überdrüssig, die Sie möglicherweise durchführen.