Impossible de trouver des 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 ne renvoie aucun résultat. Cependant, il existe des éléments dans CampaignResponse avec cette campaign._id spécifique. Je suis sûr que c’est un problème avec les types et le casting, mais je ne sais pas quoi faire.

De l’aide?

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 c’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) }; 

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

 Ssortingng.prototype.toObjectId = function() { var ObjectId = (require('mongoose').Types.ObjectId); return new ObjectId(this.toSsortingng()); }; // Every Ssortingng can be casted in ObjectId now console.log('545f489dea12346454ae793b'.toObjectId()); 

Au lieu d’utiliser ObjectId pour trouver en comparant vos parameters, 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 …