как выполнить запрос mongodb в функции mongodb?

#shell #scripting #mongodb #serverside-javascript

#оболочка #сценарии #mongodb #серверная часть-javascript

Вопрос:

Я пытаюсь написать скрипт mongo из оболочки mongo, но у меня возникла небольшая проблема. Я позволю коду объясниться самому.

 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}) — что вы видите?

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

3. попытка catch избыточна, просто сделайте if(result) print(result.url);

Ответ №1:

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

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

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

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