背景
MongoDBの_id
を二重投稿対策に利用したい。
予め_id
に入れたい値を生成しておいて、それをリクエストで引き回す。実際にドキュメントを作成するときにユニークチェックをすれば、同じリクエストが二重に走っても大丈夫なはず。
普通だと_id
はDB保存時に自動で設定されるが、以下の方法で_id
に任意の値を設定できる。
設定方法
スキーマに_idを明示的に定義する
タイプはSchema.Types.ObjectId
にしておく。
var Thing = new mongoose.Schema({
_id: Schema.Types.ObjectId,
// (略)
});
ObjectIdの生成
新規インスタンス作成時に、_idも手動で設定してやる。
// 新規作成用_idを作成して引き回す
var id = new mongoose.Types.ObjectId;
// ドキュメント作成時に、リクエスト越しに渡ってきたIdを設定
var m = new Thing;
m._id = id
m.save()
以上の設定で、指定した_id
のドキュメントを作成することができる。
ちなみに
ObjectIdはユニーク
ObjectIdはちゃんとユニークになるように設計されているらしい。
mongodbのObjectIdの生成規則 - としたにあんの左脳
参考
javascript - How to set _id to db document in Mongoose? - Stack Overflow
http://stackoverflow.com/questions/19760829/how-to-set-id-to-db-document-in-mongoose
Mongoose SchemaTypes v3.8.24
http://mongoosejs.com/docs/schematypes.html
mongodbのObjectIdの生成規則 - としたにあんの左脳
http://toshitanian.hatenablog.com/entry/2014/02/14/015314