有沒有辦法在mongoose中聲明Model模式,這樣當模型被new'ed時_id字段會自動生成?有沒有辦法在貓鼬模型新建時自動生成ObjectId?
例如:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectIdSchema = Schema.ObjectId;
var ObjectId = mongoose.Types.ObjectId;
var PersonSchema = new Schema({
_id: ObjectIdSchema,
firstName: {type: String, default: 'N/A'},
lastName: {type: String, default: 'N/A'},
age: {type: Number, min: 1}
});
var Person = mongoose.model('Person', PersonSchema);
起初,我還以爲偉大的!我會只是做
_id: {type:ObjectIdSchema, default: new ObjectId()}
當然,這並不工作,但由於新的ObjectId()僅僅是呼籲初始化架構。所以調用新的Persion()兩次會創建兩個具有相同_id值的對象。
所以有辦法做到這一點,以便每次我做「新人()」一個新的ObjectId()生成?
我試圖這樣做的原因是因爲我需要知道新人的_id值的值進一步處理。
我也嘗試:
var person = new Person({firstName: "Joe", lastName: "Baz"});
person.save(function(err, doc, num){
console.log(doc._id);
});
即使這樣,醫生不包含的ObjectId。但如果我查看數據庫,它確實包含它。
p.s.我正在使用貓鼬2.7.1
p.p.s.我知道這樣創造人的時候,我可以手動創建的ObjectId:
var person = new Person({_id: new ObjectId(), firstName: "Joe", lastName: "Baz"});
,但我寧願沒有進口的ObjectId,並有新的它,我想新的一個人每次。猜我習慣於使用MongoDB的java驅動程序,我可以在模型構造函數中爲_id字段創建值。
是的,並且不需要在模式中包含'_id'字段。 – JohnnyHK 2012-07-23 00:58:57
@JohnnyHK,你和Last Rose Studios都是對的。這完全如你所說。我註釋掉了「_id:ObjectIdSchema」這一行,當我new'ed Person()它有ID!但是當我沒有對它進行評論時,該ID從未生成過。多謝你們!非常感激。 – Khon 2012-07-23 03:30:37
對於新的觀衆,此行爲是否因爲改變?今天我不得不提到'default:new mongoose.Types.ObjectId()'沒有它,如果我在模型模式中添加了_id,它就不起作用了! – 2015-12-11 22:06:36