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?
Respuestas:
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;
});
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
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));
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");
});
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;
// ...
});
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.
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