Je cherchais également cette réponse, et je ne suis pas sûr d'aimer accéder au dernier document du tableau. J'ai cependant une solution alternative. La méthode m['b'].push
renverra un entier, 1 ou 0 - je suppose que cela est basé sur le succès de la poussée (en termes de validation). Cependant, pour avoir accès au sous-document, et en particulier au _id du sous-document, vous devez utiliser le create
méthode d'abord, puis push
.
Le code est le suivant :
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); });
Ce qui se passe, c'est que lorsque vous transmettez l'objet à la méthode push ou à la méthode create, le cast Schema se produit immédiatement (y compris des choses comme la validation et le cast de type) - cela signifie que c'est le moment où l'ObjectId est créé; pas lorsque le modèle est enregistré dans Mongo. En fait, mongo n'attribue pas automatiquement de valeurs _id aux sous-documents, il s'agit d'une fonctionnalité de mangouste. Mongoose create est documenté ici :create docs
Vous devez également noter que même si vous avez un sous-document _id - il n'est pas encore dans Mongo jusqu'à ce que vous l'enregistriez, alors méfiez-vous de toute action DOCRef que vous pourriez entreprendre.