mongoose-id-extractor-pluginで常に_idを取得
2014年10月28日
mongoose で ObjectId 型のフィールドを定義した場合、population が実行済みか否で取得できる値が変わります。
例えば、過去に書いたことでもありますが、以下の問題です:
// foo に対して populate 未実行の場合は foo が ObjectId インスタンス doc.foo; // foo に対して populate を実行済みの場合は foo はドキュメントなので // foo._id が ObjectId インスタンス doc.foo._id; // 両方の状況に対応するためには、このような分岐を書く必要がある var fooId = doc.populated('foo') || doc.foo;
npm パッケージを作った
なので、mongoose-id-extractor-plugin という npm パッケージを作りました。
mongoose-plugins の仕組みを使い、foo に対して、常に _id を抽出できる foo_id を schema.virtual で定義します。
mongoose-plugins の仕組みを使い、foo に対して、常に _id を抽出できる foo_id を schema.virtual で定義します。
大体こんな風に使う:
var mongoose = require('mongoose'); var idExtractor = require('mongoose-id-extractor-plugin'); var commentSchema = new mongoose.Schema({ article: { type: mongoose.Schema.Types.ObjectId, ref: 'Article' } }); // plugin として使う commentSchema.plugin(idExtractor, { refs:['article'] }); var Comment = mongoose.model('Comment', commentSchema); var comment = new Comment(); // 常に _id を返す article_id が生えている comment.article_id;
詳しくは、GitHub をご確認下さい。
ご査収のほど、よろしくお願い申し上げます。