LoginSignup
8
9

More than 5 years have passed since last update.

mongooseで_idに手動で値を設定する

Last updated at Posted at 2015-03-11

背景

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

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9