2013-01-31 2 views
0

je tente d'exécuter cette requête avec Perl sur une base de données MongoDB:

$db->$collection->find({"_id" : { "$in" : ["4f520122ecf6171327000137", "4f4f49c09d1bd90728000034"]}}); 

Mais rien de retour et il doit retourner deux documents. Quel est le problème avec cette requête?

Merci.

Edit: Il ne fonctionne pas trop:

$db->$collection->find({_id => "4f520122ecf6171327000137"}); 
+1

Pour nous aider à mieux vous répondre, vous auriez dû nous montrer que la requête fonctionnait correctement dans le shell mongo, et nous avons prouvé que vous avez deux documents avec les ObjectIds donnés. –

Répondre

15

Tout d'abord, assurez-vous que vous utilisez la syntaxe correcte. Votre premier exemple n'est pas un code Perl valide, puisque vous incluez un fragment de JSON en tant que paramètre de requête. Deuxièmement, en supposant que ces valeurs d'ID sont des ID d'objet MongoDB, vous devrez créer des objets OID afin de les différencier des chaînes ordinaires. Et assurez-vous d'utiliser des guillemets simples ('') autour de $in, sinon Perl essayera d'interpoler $in en tant que variable (qui n'a vraisemblablement rien dedans).

donc je suppose que vous voulez faire quelque chose comme ceci:

$db->$collection->find({ 
    "_id" => { 
     '$in' => [ MongoDB::OID->new(value => "4f520122ecf6171327000137"), 
        MongoDB::OID->new(value => "4f4f49c09d1bd90728000034") 
       ] 
      } 
}); 

Edit: De plus, en utilisant les noms de méthodes pour récupérer collections charger automatiquement a été dépréciée pendant un certain temps. Il vaut mieux utiliser $db->get_collection("collection name")->find(...)

+0

Merci pour votre réponse mais j'ai déjà essayé et ça ne marche pas. Je pense qu'il est un problème avec chauffeur MongoDB mais je ne suis pas sûr à 100%: s – Toin3

+8

Je doute sérieusement que c'est un problème avec le pilote Perl depuis que je le maintiens. Je suis capable d'interroger ObjectID avec la syntaxe ci-dessus et cela fonctionne comme prévu. – friedo

+0

Enfin, cela fonctionne comme vous le dites dans votre réponse, mais je ne sais pas pourquoi maintenant et pas avant. – Toin3

Questions connexes