web-dev-qa-db-ja.com

Mongooseを使用してObjectIdで検索するドキュメントが見つかりません

  Campaign.find {client_id:req.param('client_id')}, (error, campaigns) ->
    if error
      response =
        error: error.message
    else
      for campaign in campaigns
        query =
          campaign_id: campaign._id
        console.log query
        CampaignResponse.find query, (err, campaignResponsesCount) ->
          console.log campaignResponsesCount

      response = campaigns

    res.json response

何らかの理由で、これはnoの結果を返します。ただし、CampaignResponseには特定のcampaign._id。これは型とキャストの問題だと確信していますが、どうすればよいのかわかりません。

何か助け?

56
Shamoon

いくつかのヒント:

  • コマンドラインでmongodbから同じクエリを実行してみてください。結果が得られるかどうかを確認してください。
  • 「campaign_id」はスキーマのObjectIdとして定義されていますか?その場合は、ObjectIdタイプを使用して検索してみてください。

例えば:

var ObjectId = require('mongoose').Types.ObjectId; 
var query = { campaign_id: new ObjectId(campaign._id) };
127
andyuk

前の(正しい)答えを改善するために、私は自分のプロジェクトで使用しています:

String.prototype.toObjectId = function() {
  var ObjectId = (require('mongoose').Types.ObjectId);
  return new ObjectId(this.toString());
};

// Every String can be casted in ObjectId now
console.log('545f489dea12346454ae793b'.toObjectId());
39
Paul Rad

ObjectIdを使用する代わりに、パラメーターを比較して見つけるには

Campaign.findById {req.param('client_id'),function(err,docs)}....

objectIdを使用してドキュメントを検索する場合、findByIdは最も効率的な方法です...

8
Ravi Joshi