2014-02-02 3 views
1

Я новичок в Meteorjs, и я пытаюсь получить данные из уже существующего MongoDB. Вот что я до сих пор:Метеор клиентская сторона доступа к существующему mongoDB

  1. я установить переменную MONGO_URL ENV в URL MongoDB экспорт MONGO_URL = "MongoDB: // имя пользователя: пароль @ адрес: порт/DBName"

  2. Created новый метеорный проект с помощью следующего кода:

    MyCollection = new Meteor.Collection('mycollection'); 
    
    if (Meteor.isClient) { 
        //Meteor.subscribe("mycollection"); 
        console.log(MyCollection.findOne()); 
        Template.hello.greeting = function() { 
         return MyCollection.findOne(); 
        }; 
    } 
    
    if (Meteor.isServer) { 
        Meteor.startup(function() { 
         // code to run on server at startup 
         console.log(MyCollection.findOne()); 
        }); 
    } 
    

Я знаю, что на стороне сервера console.log(MyCollection.findOne()); работает, как она выводит правильные данные на терминале.

Проблема с клиентской стороной. Когда я просматриваю страницу в своем браузере, данные пусты, а console.log(MyCollection.findOne()); показывает «неопределенный».

Я знаю, что автообновление включено, и мне не нужно вручную публиковать коллекцию со стороны сервера.

Я хотел бы знать, как я мог бы заставить клиента читать из моего внешнего mongoDB напрямую. Дайте мне знать, если у вас есть предложения!

ответ

0

Даже при автообновлении происходит задержка между запуском клиента и публикуемыми данными. В то время, когда выполняется ваш первый console.log, документы не завершили синхронизацию, поэтому findOne вернет undefined. Оказывается, это не имеет большого значения; по мере того, как вы более знакомы с метеоритом, вы увидите, что результаты операций find часто используются не чувствительными к времени способами. Самый простой способ проверить, если клиент имеет данные только ждать загрузки страницы, а затем запустить консоль браузера и введите вручную:

console.log(MyCollection.findOne()); 

Как для другой задачи, приветствие должно быть что-то который может отображаться в html - например, в строке. Это не может быть документ. Предполагая, что у вашего документа есть message недвижимость, которую вы могли бы сделать:

return MyCollection.findOne().message; 
+0

Спасибо за помощь! Я не знал, что для публикации данных требуется некоторое время. Это привело меня на правильный путь, и я обнаружил, что причина, по которой он так долго задерживался, заключалась в том, что db был слишком большой. Я тестировал его на меньшем дБ, и, похоже, он работает. – anubhavashok

+0

Я рад, что это было полезно. Надеемся, вы сможете определить способ публикации меньшего подмножества данных и повышения производительности. –

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