¿Cómo insertar un documento en mongodb usando mongoose y obtener el id generado?
Estoy usando mongoose para operar mongodb. Ahora, para probar, quiero insertar algunos datos en mongodb por conexión nativa.
Pero la pregunta es ¿cómo obtener el id generado después de insertar?
Lo intenté:
var mongoose = require('mongoose');
mongoose.connect('mongo://localhost/shuzu_test');
var conn = mongoose.connection;
var user = {
a: 'abc'
};
conn.collection('aaa').insert(user);
console.log('User:');
console.log(user);
Pero imprime:
{ a: 'abc' }
No hay un campo _id
.
4 answers
Puede generar _id
usted mismo y enviarlo a la base de datos.
var ObjectID = require('mongodb').ObjectID;
var user = {
a: 'abc',
_id: new ObjectID()
};
conn.collection('aaa').insert(user);
Esta es una de mis características favoritas de MongoDB. Si necesita crear una serie de objetos, que están vinculados entre sí, no es necesario hacer numerosos viajes de ida y vuelta entre la aplicación y la base de datos. Puede generar todos los ID en la aplicación y luego simplemente insertar todo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-09 16:52:53
Si usa .guardar entonces obtendrá el _id de nuevo en la función de devolución de llamada.
var user = new User({
a: 'abc'
});
user.save(function (err, results) {
console.log(results._id);
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-14 21:23:28
Puede usar el método Update con la opción upsert: true
aaa.update({
a : 'abc'
}, {
a : 'abc'
}, {
upsert: true
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-20 08:00:00
Si te gusta usar Promesas:
const collection = conn.collection('aaa');
const instance = new collection({ a: 'abc' });
instance.save()
.then(result => {
console.log(result.id); // this will be the new created ObjectId
})
.catch(...)
O si está utilizando Node.js > = 7.6.0:
const collection = conn.collection('aaa');
const instance = new collection({ a: 'abc' });
try {
const result = await instance.save();
console.log(result.id); // this will be the new created ObjectId
} catch(...)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-20 13:11:48