Я пытаюсь опубликовать коллекцию классов для пользователей, у которых есть accountStatus.isUserAccountActive: true
. В моем текущем коде публикуются пользователи, которые активны, но затем все коллекции классов. Может кто-нибудь, пожалуйста, покажите мне, что я делаю неправильно?Meteor - Публикация коллекции по статусу пользователей
Meteor.publish('classList', function (group) {
if (Roles.userIsInRole(this.userId, ['is_teacher'], group)) {
return [
Meteor.users.find({roles:'is_student', "accountStatus.isUserAccountActive": true},
{fields: {
"profile.firstName": 1,
"profile.familyName": 1,
roles: 1,
"accountStatus.isUserAccountActive": 1
}
}),
classes.find({teacherUserId: this.userId},
{fields: {
"studentUserId": 1,
"class": 1
}})
];
} else {
// user not authorized. do not publish secrets
this.stop();
return;
}
});
Я не вижу ничего очевидного. Трудно сказать, не видя конкретного примера. Можете ли вы опубликовать документ, который опубликован и не может быть, и 'userId', для которого был опубликован документ? Попробуйте записать 'userId' или запустить запрос в сеансе' meteor shell'. – MasterAM
Hi MasterAm. Спасибо, что ответили. Моя интерпретация приведенного выше кода заключается в том, что он публикует пользователей, в которых пользователи «accountStatus.isUserAccountActive»: true, а затем публикует все коллекции классов. Коллекция классов не зависит от коллекции выше. Я думаю, что мне нужен оператор if, который говорит, если '' accountStatus.isUserAccountActive ": true", то опубликуйте все эти учетные записи. – bp123
Вы хотите публиковать классы, в которых идентификатор 'teacherUserId' является идентификатором текущего пользователя, а' studentUserId' принадлежит пользователю с статусом 'accountStatus.isUserAccountActive'' 1'? Если это так, то вы пытаетесь выполнить так называемое 'join', и это точка боли в MongoDB. Это нелегко сделать. Вы можете либо де-нормализовать данные (и затем синхронизировать их по мере их изменения), либо выполнить соединение вручную на клиенте (показать класс, если вы можете найти пользователя и учетную запись пользователя активным), используйте пакет, такой как как «publish-composite» или агрегация MongoDB. – MasterAM