Can't find documents searching by ObjectId using Mongoose

Mongodbnode.jsMongoose

Mongodb Problem Overview


  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

For some reason, this returns no results. However, there are items in CampaignResponse with that specific campaign._id. I'm pretty sure this is an issue with types and casting, but I can't figure out what to do.

Any help?

Mongodb Solutions


Solution 1 - Mongodb

A couple tips:

  • Try running the same query from mongodb at the command line, see if you get any results.
  • Is the "campaign_id" defined as an ObjectId in your schema? If so, try searching using the ObjectId type.

For example:

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

Solution 2 - Mongodb

Just to improve the previous (correct) answer, i use on my projects :

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());

Solution 3 - Mongodb

Instead of using ObjectId to find by comparing your parameters simply use

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

when finding docs using objectId findById is the most efficient way of all...

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionShamoonView Question on Stackoverflow
Solution 1 - MongodbandyukView Answer on Stackoverflow
Solution 2 - MongodbPaul RadView Answer on Stackoverflow
Solution 3 - MongodbRavi JoshiView Answer on Stackoverflow