旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

[mongoose] populate関係なく_idを取得したい

2014年5月28日

例えば doc が子スキーマの child を持つとするじゃん?

doc.child を populate していない場合:

doc.child  // -> ObjectId

doc.populate(‘child’) 実行済み:

doc.child  // -> ドキュメント
doc.child._id  // -> ObjectId

現在の自分の解答はこれ:

var _id = doc.child._id || doc.child;

null があるかもしれない場合:

var _id = (doc.child || {})._id || doc.child;

コォヒィスクリプトゥ!:

_id = doc.child?._id ? doc.child

一応これで動いては居るんですが、まぁスマートじゃないのでどうしたらいいのでしょう?

ちなみに、doc.populated(‘child’) という populate 済みの場合は ObjectId を返すものがあるのですが、未 populate だと undefined が返るのでこの問題には使い難い。

Refs) mongoose – Document#populated(path)

追記: 2014-05-28

こうすりゃ今よりは良くなった:

// child が null でも populated('child') は undefined を返す
var _id = doc.populated('child') || doc.child;

とはいえ、一言で取れないのでまだ長いですが。