2011-06-10 4 views
2

Я пытаюсь написать скрипт mongo из оболочки mongo, но у меня небольшая проблема. Я дам код объяснить сам.Как выполнить запрос mongodb в функции 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) 

Так что все, что я пытаюсь сделать прямо сейчас, это просто напечатать URL, но когда я запускаю этот запрос, я получаю сообщение об ошибке.

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

Любая идея, что я делаю неправильно?

+1

Похоже, что запрос не находит ничего, и в этом случае он вернет null. Распечатайте промежуточный результат 'db.Instance.findOne ({name: name})' - что вы видите? – YXD

+0

спасибо г-ну Э, это была именно та проблема, которая у меня была. я попытался ответить на свой вопрос, но у меня не было достаточного количества очков. поэтому я отправлю свое решение здесь. .. я думаю, я не могу, это слишком долго, но да, все, что я сделал, было обернуть его в попытку поймать, и это работает. – Khon

+0

try catch is over just just 'if (result) print (result.url);' – YXD

ответ

1

Основная проблема: следующее может не вернуть значение db.Instance.findOne({name:name}). Поэтому, когда вы добавляете .url, вы пытаетесь получить значение от нуля.

Попробуйте следующее:

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

У вас же потенциальная проблема с name полем (name = data[i].name).

Смежные вопросы