mongoose で存在チェックの巻

ええとテーブルに行があるかいな的チェックをある手続きでしようと思ったんですが find に渡す lambda なオブジェクトは別コンテキストで呼び出されることに気づく。例えば以下なカンジ。

function existCheck(docType) {
    hogeTable.findByName(docTYpe, function(err, posts) {
	if(posts.length == 0) {
	    return false;
	}
	return true;
    });
};

困りつつ mongoose の中を確認してみたら mongoose の query.js が以下な記述になっていることを発見。

Query.prototype.find = function (criteria, callback) {
  this.op = 'find';
  if ('function' === typeof criteria) {
    callback = criteria;
    criteria = {};
  } else if (criteria instanceof Query) {
    // TODO Merge options, too
    merge(this._conditions, criteria._conditions);
  } else if (criteria instanceof Document) {
    merge(this._conditions, criteria.toObject());
  } else if (criteria && 'Object' === criteria.constructor.name) {
    merge(this._conditions, criteria);
  }
  if (!callback) return this;
  return this.execFind(callback);
};

callback を略してる場合、this を戻されています。

ソース見てたら exists て手続きの定義があるのを発見。これ、Schema.exists なカンジで呼び出せるのかどうなのか。でも手続き定義見たら this 戻してるな。

そか

存在チェックな手続きに lambda なオブジェクトを渡してそっちで云々させれば良いのか。どうも調子狂うな。定義としては以下なカンジ?

function existCheck(docType, callback) {
    MetaInfo.findByName(docType, function(err, posts) {
	callback(posts);
    });
};

で、呼び出し側でなんちゃら、ってしてあげれば良いのか。