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