是否有一种方法来自动生成ObjectIdmongoose模型new'ed?
有没有办法在mongoose中声明一个Model模式,这样当模型被new'ed时_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()}
但当然这是行不通的,因为新的ObjectId()只在模式的初始化时被调用。 所以调用新的Persion()两次会创build两个具有相同_id值的对象。
所以有办法做到这一点,每当我做“新人()”一个新的ObjectId()生成?
我试图这样做的原因是因为我需要知道新人的_id值的价值进一步处理。
我也试过:
var person = new Person({firstName: "Joe", lastName: "Baz"}); person.save(function(err, doc, num){ console.log(doc._id); });
即使这样,doc也不包含ObjectId。 但是如果我查看数据库,它确实包含它。
ps我正在使用mongoose2.7.1
PPS我知道我可以手动创buildObjectId时创build人:
var person = new Person({_id: new ObjectId(), firstName: "Joe", lastName: "Baz"});
但我宁愿不必导入ObjectId,每当我想要一个新的人都必须新的。 猜我习惯使用MongoDB的java驱动程序,我可以在模型构造函数中创build_id字段的值。
当你调用var person = new Person(); person._id应该给你的ID(即使它还没有被保存)。 只是实例化它就足以给它一个ID。 你仍然可以保存它,这将存储身份证以及人对象的其余部分
代替:
_id: {type:ObjectIdSchema, default: new ObjectId()}
你应该做:
_id: {type:ObjectIdSchema, default: function () { return new ObjectId()} }
添加auto
标志:
_id: { type: mongoose.Schema.Types.ObjectId, index: true, required: true, auto: true, }
资源