有没有办法在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