2011-07-28 125 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

相關問題