2011-07-28 128 views

回答

78

这只是为我工作:

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 
$ 

我对猫鼬1.7.2,这工作得很好,刚跑一遍,以确保万无一失。

+1

我得到了一个未定义的“房间” ... – TIMEX

+1

我有一个完整的测试更新,这一点 - 与猫鼬1.7.2 –

+7

工作未定义的房间对象表示错误节约的n。在访问文档之前执行错误检查的最佳做法。 – ChrisMcJava

31

Mongo将完整的文档作为回调对象发送,所以您只需从那里获取它。

例如

n.save(function(err,room){ 
    var newRoomId = room._id; 
    }); 
3

你可以在OBJECTID你mongoosejs一些新的模式后。

我用了猫鼬4此代码的工作,你可以尝试在其他版本

var n = new Chat(); 
var _id = n._id; 

n.save((function (_id) { 
    return function() { 
    console.log(_id); 
    // your save callback code in here 
    }; 
})(n._id)); 
1

可以手动生成的_id那么你不必担心以后再把它拉出来。

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 
+0

知道的非常有用,防止异步代码时,同步会做。谢谢! – ryanm

相关问题