I'm using mongoose to operate mongodb. Now, for testing, I want to inserting some data into mongodb by native connection.
But the question is how to get the generated id after inserting?
I tried:
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);
But it prints:
{ a: 'abc' }
There is no _id
field.
You can generate _id
yourself and send it to the database.
var ObjectID = require('mongodb').ObjectID;
var user = {
a: 'abc',
_id: new ObjectID()
};
conn.collection('aaa').insert(user);
This is one of my favourite features of MongoDB. If you need to create a number of objects, that are linked to each other, you don't need to make numerous round-trips between app and db. You can generate all ids in the app and then just insert everything.
If you use .save then you'll get the _id back in the callback function.
var user = new User({
a: 'abc'
});
user.save(function (err, results) {
console.log(results._id);
});
You can use the Update method with upsert: true option
aaa.update({
a : 'abc'
}, {
a : 'abc'
}, {
upsert: true
});
If you like using Promises:
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(...)
Or if you're using 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(...)