var n = new Chat();
n.name = "chat room";
n.save(function(){
//console.log(THE OBJECT ID that I just saved);
});
Quiero console.log la identificación del objeto que acabo de guardar. ¿Cómo hago eso en Mongoose?
Esto simplemente funcionó para mí:
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
$
Estoy en Mongoose 1.7.2 y esto funciona bien, solo lo ejecuté de nuevo para estar seguro.
Mongo envía el documento completo como un objeto de devolución de llamada para que pueda obtenerlo solo desde allí.
por ejemplo
n.save(function(err,room){ var newRoomId = room._id; });
fuente
Puede generar manualmente el _id, entonces no tiene que preocuparse por sacarlo más tarde.
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
fuente
puede obtener objectid en mongoosejs después de que haya nuevo algún modelo.
Estoy usando este código para trabajar en mongoose 4, puedes probarlo en otra versión
var n = new Chat(); var _id = n._id;
o
n.save((function (_id) { return function () { console.log(_id); // your save callback code in here }; })(n._id));
fuente
Otras respuestas han mencionado agregar una devolución de llamada, prefiero usar .then ()
n.name = "chat room"; n.save() .then(chatRoom => console.log(chatRoom._id));
ejemplo de los documentos :.
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"); });
fuente
Con
save
todo lo que necesitas hacer es:n.save((err, room) => { if (err) return `Error occurred while saving ${err}`; const { _id } = room; console.log(`New room id: ${_id}`); return room; });
En caso de que alguien se pregunte cómo obtener el mismo resultado usando
create
:const array = [{ type: 'jelly bean' }, { type: 'snickers' }]; Candy.create(array, (err, candies) => { if (err) // ... const [jellybean, snickers] = candies; const jellybeadId = jellybean._id; const snickersId = snickers._id; // ... });
Consulte el documento oficial
fuente
Bueno, tengo esto:
TryThisSchema.post("save", function(next) { console.log(this._id); });
Observe la "publicación" en la primera línea. Con mi versión de Mongoose, no tengo problemas para obtener el valor _id después de guardar los datos.
fuente
En realidad, la ID ya debería estar allí al crear una instancia del objeto
var n = new Chat(); console.log(n._id) // => 4e7819d26f29f407b0... -> ID is already allocated
Consulte esta respuesta aquí: https://stackoverflow.com/a/7480248/318380
fuente