Есть ли способ объявить схему модели в мангусте, так что, когда модель будет 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() вызывается только при инициализации схемы. поэтому вызов new Persion() дважды создает два объекта с одинаковым значением _id.
так есть ли способ сделать это, чтобы каждый раз, когда я делал "новый Person()", создаваемый новый ObjectId()?
причина, по которой я пытаюсь это сделать, заключается в том, что мне нужно знать значение нового значения _id для дальнейшей обработки.
Я также пробовал:
var person = new Person({firstName: "Joe", lastName: "Baz"});
person.save(function(err, doc, num){
console.log(doc._id);
});
даже тогда, doc не содержит ObjectId. но если я смотрю в базе данных, он ее содержит.
p.s. я использую mongoose 2.7.1
p.p.s. я знаю, что могу вручную создать ObjectId при создании человека как такового:
var person = new Person({_id: new ObjectId(), firstName: "Joe", lastName: "Baz"});
но мне не нужно импортировать ObjectId, и мне нужно его обновлять каждый раз, когда я хочу создать новое Person. думаю, я привык использовать java-драйвер для mongodb, где я могу просто создать значение для поля _id в конструкторе Model.