MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

trouver l'identifiant du dernier sous-document inséré dans la mangouste

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.