#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
).