70 votes

Impossible de trouver des documents en recherchant 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 y a 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?

153voto

andyuk Points 9464

Quelques conseils :

  • Essayez d'exécuter la même requête depuis 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 à l'aide du type ObjectId.

Par exemple:

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

44voto

Paul Rad Points 2264

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

11voto

Ravi Joshi Points 389

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

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

lors de la recherche de documents à l'aide d'objectId, findById est le moyen le plus efficace de tous ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X