96 votes

Comment obtenir l'objectID après avoir enregistré un objet dans Mongoose ?

var n = new Chat();
n.name = "chat room";
n.save(function(){
    //console.log(THE OBJECT ID that I just saved);
});

Je veux consoler.log l'identifiant de l'objet que je viens d'enregistrer. Comment puis-je faire cela dans Mongoose?

125voto

Richard Holland Points 1005

Cela vient de fonctionner pour moi:

 var mongoose = require('mongoose'),
      Schema = mongoose.Schema;

mongoose.connect('mongodb://localhost/lol', function(err) {
    if (err) { console.log(err) }
});

var ChatSchema = new Schema({
    name: String
});

mongoose.model('Chat', ChatSchema);

var Chat = mongoose.model('Chat');

var n = new Chat();
n.name = "chat room";
n.save(function(err,room) {
   console.log(room.id);
});

$ node test.js
4e3444818cde747f02000001
$

Je suis sur mongoose 1.7.2 et cela fonctionne très bien, il suffit de le relancer pour être sûr.

49voto

Anathema.Imbued Points 2581

Mongo envoie le document complet en tant qu'objet de rappel afin que vous puissiez simplement l'obtenir à partir de là uniquement.

par exemple

 n.save(function(err,room){
  var newRoomId = room._id;
  });

16voto

Alan Points 360

Vous pouvez générer manuellement le _id sans avoir à vous soucier de le retirer plus tard.

 var mongoose = require('mongoose');
var myId = mongoose.Types.ObjectId();

// then set it manually when you create your object

_id: myId

// then use the variable wherever

11voto

yue Points 91

Vous pouvez obtenir l'identifiant de l'objet dans Mongoose juste après avoir créé une nouvelle instance d'objet sans avoir à l'enregistrer dans la base de données.

J'utilise ce code dans mongoose 4. Vous pouvez l'essayer dans d'autres versions.

 var n = new Chat();
var _id = n._id;

ou

 n.save((function (_id) {
  return function () {
    console.log(_id);
    // your save callback code in here
  };
})(n._id));

4voto

Julian Orinyol Points 426

D'autres réponses ont mentionné l'ajout d'un rappel, je préfère utiliser .then()

 n.name = "chat room";
n.save()
.then(chatRoom => console.log(chatRoom._id));

exemple de la doc :.

 var gnr = new Band({
  name: "Guns N' Roses",
  members: ['Axl', 'Slash']
});

var promise = gnr.save();
assert.ok(promise instanceof Promise);

promise.then(function (doc) {
  assert.equal(doc.name, "Guns N' Roses");
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X