有没有办法在猫鼬中声明模型模式,这样当模型是新的时,_id 字段会自动生成?
例如:
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()}
但当然这不起作用,因为 new ObjectId() 仅在模式初始化时被调用。所以调用 new Persion() 两次会创建两个具有相同 _id 值的对象。
那么有没有办法做到这一点,以便每次我执行“new Person()”时都会生成一个新的 ObjectId()?
我之所以尝试这样做是因为我需要知道新人的 _id 值的值以进行进一步处理。
我也试过:
var person = new Person({firstName: "Joe", lastName: "Baz"});
person.save(function(err, doc, num){
console.log(doc._id);
});
即使那样,doc 也不包含 ObjectId。但如果我查看数据库,它确实包含它。
ps 我正在使用猫鼬 2.7.1
pps我知道我可以在创建人时手动创建ObjectId:
var person = new Person({_id: new ObjectId(), firstName: "Joe", lastName: "Baz"});
但我宁愿不必导入 ObjectId 并且每次我想新建一个人时都必须新建它。猜想我习惯使用 mongodb 的 java 驱动程序,我可以在 Model 构造函数中为 _id 字段创建值。