web-dev-qa-db-fra.com

Impossible de trouver les documents recherchés par ObjectId à l'aide de Mongoose

  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

Pour une raison quelconque, cela renvoie non résultats. Cependant, il existe des éléments dans CampaignResponse avec ce campaign._id Spécifique. Je suis presque sûr que c'est un problème avec les types et le casting, mais je ne sais pas quoi faire.

De l'aide?

56
Shamoon

Quelques conseils:

  • Essayez d'exécuter la même requête à partir de mongodb sur la ligne de commande, voyez si vous obtenez des résultats.
  • Le "campaign_id" est-il défini comme un ObjectId dans votre schéma? Si tel est le cas, essayez de rechercher en utilisant le type ObjectId.

Par exemple:

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

Juste pour améliorer la réponse précédente (correcte), j'utilise sur mes projets:

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

Au lieu d'utiliser ObjectId pour rechercher en comparant vos paramètres, utilisez simplement

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

lors de la recherche de documents en utilisant objectId findById est le moyen le plus efficace de tous ...

8
Ravi Joshi