mongooseで配列を連想配列でネストした時につく_idを消したい

悩んだので覚書

ユーザが書いたコメントを参照として引っ張ってきて欲しくて、それと同時に記載した時間も取りたいっていう場合を想定。

単純にスキーマを書くとこうなる。

var userSchema = {
	name: String,
	comments : [{
		comment: {type: Number, ref: 'comment'},
		updated: {type: Date, default: Date.now}
	}]
};

そうするとなぜか、commentsの要素たちに_idが勝手に入ってしまう。

非常に_idが邪魔

var userSchema = {
	name: String,
	comments : [Schema.Types.Mixed]
};

こう書くとと、commentsに_idは入らないのでmongooseが勝手に挿入してるっぽい。

調べるとどうも連想配列を新しいスキーマとして認識してるから_idが勝手に入るよう。

なので、スキーマとして_idを消すような処理を入れる

var userSchema = {
	name: String,
	comments : [new Schema({
		comment: {type: Schema.Types.ObjectId, ref: 'comment'},
		updated: {type: Date, default: Date.now}
	}, {_id: false})]
};

こうすると、_idが消える。めでたしめでたし。