2011-06-10 7 views
2

J'essaie d'écrire un script mongo depuis le shell mongo, mais j'ai un petit problème. Je vais laisser le code s'expliquer.comment faire une requête mongodb dans une fonction mongodb?

var shops = db.Shop.find({}) 

function printShopUrl(data) { 
    var name, url; 
    for (var i = 0; i < data.length(); i++) { 
     name = data[i].name; 
     url = db.Instance.findOne({name:name}).url; 
     print(url); 
    } 
} 

printShopUrl(shops) 

Donc tout ce que je suis en train de faire est en ce moment juste pour imprimer l'URL, mais quand je lance cette requête je reçois une erreur.

TypeError: db.Instance.findOne({name:name}) has no properties (shell):1 

Une idée de ce que je fais mal?

+1

Il semble que la requête ne trouve rien, auquel cas elle retournera null. Imprimez le résultat intermédiaire 'db.Instance.findOne ({name: name})' - que voyez-vous? – YXD

+0

merci M. E, c'était exactement le problème que j'avais. J'ai essayé de répondre à ma propre question, mais je n'avais pas assez de points. donc je posterai ma solution ici. .. je suppose que je ne peux pas, c'est trop long, mais ouais, tout ce que je faisais était envelopper dans une prise d'essai et cela fonctionne. – Khon

+0

try catch is excessif faites juste 'if (result) print (result.url);' – YXD

Répondre

1

Problème principal: les éléments suivants peuvent ne pas renvoyer de valeur db.Instance.findOne({name:name}). Par conséquent lorsque vous ajoutez .url, vous essayez d'obtenir une valeur à partir d'un null.

les opérations suivantes:

var obj = db.Instance.findOne({name:name}); 
if(obj && obj.url) { print(obj.url); } 

Vous avez le même problème potentiel avec le champ name (name = data[i].name).

Questions connexes