モデルが新しく作成されたときに_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() を 2 回呼び出すと、同じ _id 値を持つ 2 つのオブジェクトが作成されます。
「new Person()」を実行するたびに、新しい ObjectId() が生成されるようにする方法はありますか?
これをやろうとしている理由は、さらに処理するために新しい人の _id 値の値を知る必要があるためです。
私も試しました:
var person = new Person({firstName: "Joe", lastName: "Baz"});
person.save(function(err, doc, num){
console.log(doc._id);
});
それでも、doc には ObjectId が含まれていません。しかし、データベースを見ると、それが含まれています。
PS私はマングース2.7.1を使用しています
pps 私は、人を作成するときに ObjectId を手動で作成できることを知っています。
var person = new Person({_id: new ObjectId(), firstName: "Joe", lastName: "Baz"});
しかし、私は ObjectId をインポートする必要はなく、Person を新しくしたいたびにそれを新しくする必要があります。私は mongodb 用の Java ドライバーを使用することに慣れていると思います。そこでは、Model コンストラクターの _id フィールドの値を作成するだけです。