2016-01-25 3 views
0

Я пытаюсь использовать оператор findOne для доступа к документу из коллекции в рамках функции преобразования.Как использовать find/findOne вне вспомогательной функции

this.helpers({ 
    posts: function() { 
     return Posts.find(this.getReactively('filter'), {sort: {createdAt: -1}, transform: function (doc) { 
     var restaurant = Restaurants.findOne(doc.rest_id); 
      doc.restaurant = restaurant.name; 
      doc.neighborhood = restaurant.neighborhood; 
     return doc; 
     }}); 
    } 
    }); 

Проблема в том, что вызов findOne не возвращает ничего (неопределенный). Аналогично, использование find.fetch() возвращает пустой массив.

После устранения неполадок, я обнаружил, что запуск find или findOne в любом месте моего кода, кроме как непосредственно в качестве помощника (т. Е. Return Posts.find() работает нормально) ничего не возвращает. Я прочитал, что клиент, возможно, не подписался на данные на данный момент, но на клиентской стороне ничего не появляется.

Запуск тех же самых ресторанов.find или findOne отлично работает на консоли, возвращая ожидаемые документы.

Я пытаюсь сделать что-то, что не поддерживается угловым метеор? Поддерживаются ли функции поиска только в контексте помощника?

+0

MongoDB - это база данных, основанная на документе. В такой базе данных вы бы хотели иметь свойства «ресторан» и «окрестности», которые непосредственно определены в коллекции 'Posts'. –

+0

_ «ничего не появляется на стороне клиента» _ или _ «Запуск тех же самых« Ресторанов ». Find или« отлично работает на консоли »_ ..? Если первое верно, то вы не публикуете данные. Если последнее верно, то вы пытаетесь получить доступ к этим данным, прежде чем они будут готовы. –

ответ

0

Я думаю, что часть, которую вам не хватает здесь, состоит в том, что функция Mongo (то есть в вызове Mongo) вызывается функцией transform: это не функция обратного вызова.

Итак, вам нужно получить документы, а затем findOne для каждого извлеченного документа.

this.helpers({ 
    posts: function() { 
     var my_posts = Posts.find(this.getReactively('filter'), {sort: {createdAt: -1}).fetch(); 
     my_posts.forEach(function (doc) { 
     var restaurant = Restaurants.findOne(doc.rest_id); 
      doc.restaurant = restaurant.name; 
      doc.neighborhood = restaurant.neighborhood; 
     return doc; 
     } 
    });   
}); 
+0

Большое вам спасибо, работает безупречно. Я застрял на этом в течение смущающего времени, я полностью не понял проблему обратного вызова. –

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