2016-07-31 2 views
0

Я пытаюсь опубликовать список пользователей. Я проверяю коллекцию на accoutActive: true, а затем набирает studentUserId. Я думал, что смогу использовать это, чтобы найти метеорита, но он ничего не возвращает. Может кто-нибудь, пожалуйста, скажите мне, что мне не хватает.Meteor не публикует правильных пользователей

Meteor.publish('list', function() { 
    var activeStudent = StudentAccountStatus.find(
          {"accountActive": true}, 
          {fields: 
          {"studentUserId": 1} 
          } 
         ).fetch(); 

    return Meteor.users.find(
        {_id: activeStudent} 
       ); 
}); 
+0

Не понимаю, почему вы прямо не возвращаете свой первый запрос. Удалите .fetch(), поскольку вам нужно вернуть курсор Mongo на функцию публикации. –

+0

«activeStudent» присваивается массив объектов. Вам нужно восстановить соответствующую строку из нее (или массив строк и использовать селектор '$ in'). Обратите внимание, что результат не будет реагирующим (в том смысле, что дополнительные «активные» учетные записи не будут опубликованы) и будьте очень осторожны в отношении полей пользователя, которые вы используете. – MasterAM

ответ

1

В настоящее время переменная activeStudent содержит массив объектов, которые будут выглядеть примерно так:

[ { _id: 'a104259adsjf' }, 
    { _id: 'eawor7u98faj' }, 
... ] 

в то время как для Монго запроса нужно просто массив строк, т.е. ['a104259adsjf', 'eawor7u98faj', ...].

Таким образом, вы должны повторять через массив объектов построить массив строк, как и с функцией lodash _.map:

var activeStudentIds = _.map(activeStudent, function(obj) { 
    return obj._id; 
}); 

Затем, используя Монго $ в селекторе вы можете переформулировать ваш запрос как:

return Meteor.users.find(
    {_id: { $in: activeStudentIds } } 
);