Я проверил ваш запрос, и он отлично работает и возвращает только один объект из массива userScores
, который соответствует userId
.
. Вам нужно использовать fields
для фильтрации полей, которые вы хотитеpublish.
Meteor.publish('scoresTeamByUser', function(teamId) {
return Scores.find(
{ teamId },
{ fields: { userScores: { $elemMatch: { userId: this.userId }}} }
);
});
Причина, по которой вы получаете все объекты в массиве userScores
, заключается в том, что у вас должна быть другая подписка, которая публикует всю запись.Вы можете проверить это по console.log(Scores.findOne({ props.teamId}))
перед подпиской на публикацию scoresTeamByUser
.
Итак, вам нужно либо найти эту публикацию и ограничить ее публикацией только оценок текущего пользователя или вашей текущей подписки,Вам необходимо отфильтровать данные по клиентскому запросу, как показано ниже.
export default withTracker(props => {
const scoresSubscription = Meteor.subscribe('scoresTeamByUser', props.teamId);
return {
receivedScores: Scores.findOne({ teamId: props.teamId },
{ userScores: { $elemMatch: { userId: Meteor.userId() } }),
scoresLoaded: scoresSubscription.ready()
};
})(GiveScores);