Есть ли способ автоматически генерировать ObjectId при обновлении модели мангуста?

Есть ли способ объявить схему модели в мангусте, чтобы при обновлении модели поле _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, где я могу просто создать значение для поля идентификатора _в конструкторе модели.

22
задан Khon 22 July 2012 в 23:47
поделиться