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