如何使用mongoose将文档插入mongodb并获取生成的id?

时间:2012-05-09 16:46:47

标签: mongodb mongoose

我正在使用猫鼬来操作mongodb。现在,为了测试,我想通过本机连接将一些数据插入到mongodb中。

但问题是如何在插入后获取生成的ID?

我试过了:

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);

但它打印出来:

{ a: 'abc' }

没有_id字段。

4 个答案:

答案 0 :(得分:40)

您可以自己生成_id并将其发送到数据库。

var ObjectID = require('mongodb').ObjectID;

var user = {
  a: 'abc',
  _id: new ObjectID()
};

conn.collection('aaa').insert(user);

这是我最喜欢的MongoDB功能之一。如果您需要创建多个彼此链接的对象,则无需在app和db之间进行多次往返。您可以在应用程序中生成所有ID,然后只需插入所有内容。

答案 1 :(得分:7)

如果您使用.save,那么您将在回调函数中返回_id。

var user = new User({
  a: 'abc'
});

user.save(function (err, results) {
  console.log(results._id);
});

答案 2 :(得分:1)

您可以将Update方法与upsert:true选项

一起使用
aaa.update({
    a : 'abc'
}, {
    a : 'abc'
}, {
    upsert: true
});

答案 3 :(得分:1)

如果你喜欢使用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(...)

或者如果你正在使用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(...)